레코드를 업데이트하는 중에 문제가 있습니다. 웬일인지 컨트롤러에서 게시 작업을 수행하고 돌아 오는 것조차하지 않습니다. "동일한 키를 가진 항목이 이미 추가되었습니다."EF 4.1을 사용하여 MVC3보기가 업데이트되지 않습니다.
업데이트보다는 삽입 기능을하는 것처럼 동작하는 것처럼 보입니다. 이것에 대한 새로운 시각을 주셔서 감사합니다. 아마도 내가 놓친 것은 아주 간단 할 것입니다.
컨트롤러 :
// GET: /Manage/Regions/Edit/5
public ActionResult Edit(int id)
{
Region_CU regionEdit = (from r in db.Venues_Regions
where r.RegionsID == id
select new Region_CU
{
RegionsID = r.RegionsID,
Name = r.Name,
CalendarLink = r.CalendarLink,
MapIcon = r.MapIcon,
QtrStart = r.QtrStart,
QtrEnd = r.QtrEnd,
FacebookLikeBox = r.FacebookLikeBox,
FacebookId = r.FacebookId
// region = r
}).Single();
return View(regionEdit);
}
//
// POST: /Manage/Regions/Edit/5
[HttpPost]
public ActionResult Edit(Region_CU r)
{
if (ModelState.IsValid)
{
var v = db.Venues_Regions.First(i => i.RegionsID == r.RegionsID);
//v.RegionsID = r.RegionsID;
v.Name = r.Name;
v.CalendarLink = r.CalendarLink;
v.MapIcon = r.MapIcon;
v.QtrStart = r.QtrStart;
v.QtrEnd = r.QtrEnd;
v.FacebookLikeBox = r.FacebookLikeBox;
v.FacebookId = r.FacebookId;
//Venues_Regions v = new Venues_Regions
//{
// RegionsID = r.RegionsID,
// Name = r.Name,
// CalendarLink = r.CalendarLink,
// MapIcon = r.MapIcon,
// QtrStart = r.QtrStart,
// QtrEnd = r.QtrEnd,
// FacebookLikeBox = r.FacebookLikeBox,
// FacebookId = r.FacebookId
//};
//db.Venues_Regions.Attach(v);
//db.ObjectStateManager.ChangeObjectState(v, EntityState.Modified);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(r);
}
보기 :
@model THPT_Razor.Areas.Manage.Models.Region_CU
@{
ViewBag.Title = "Edit Region";
}
<h2>Edit</h2>
<link href="@Url.Content("~/Content/themes/base/jquery.ui.all.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script>
<script>
$(document).ready(function() { $('.date').datepicker({ dateFormat: "mm/dd/yy" }); });
</script>
@using (Html.BeginForm()) {
@* @Html.ValidationSummary(true)*@
<fieldset>
<legend>@Html.DisplayFor(model => model.Name)</legend>
@Html.HiddenFor(model => model.RegionsID)
@Html.HiddenFor(model => model.Name)
@Html.HiddenFor(model => model.CalendarLink)
<div class="editor-label">
@Html.Label("Map Icon")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.MapIcon, new SelectList(Model.mapicons,"id","Description"))
</div>
<div class="editor-label">
@Html.Label("Quarter Start")
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.QtrStart, new { @class = "date" })
@Html.ValidationMessageFor(model => model.QtrStart)
</div>
<div class="editor-label">
@Html.Label("Quarter End")
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.QtrEnd, new { @class = "date" })
@Html.ValidationMessageFor(model => model.QtrEnd)
</div>
<div class="editor-label">
@Html.Label("Region Facebook ID")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.FacebookId)
@Html.ValidationMessageFor(model => model.FacebookId)
</div>
<div class="editor-label">
@Html.Label("Region Facebook LikeBox Code")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.FacebookLikeBox)
@Html.ValidationMessageFor(model => model.FacebookLikeBox)
</div>
<p>
<input type="submit" value="Update" />
</p>
</fieldset>
편집 :
제가받은 여러 가지 좋은 제안하지만 난이 명확하지 않은 것 같아요. Region_CU는 엔티티가 아닙니다. Venues_Regions는 내가 업데이트하려고하는 것입니다. 아래 클래스에있는 설명을 참조하십시오. 최초의 목표는 Venues_Regions 객체와지도 아이콘에 대한 목록 객체가있는 간단한 래퍼를 작성하는 것이 었습니다. 그러나 Likebox 필드의 데이터 주석은 전달되지 않아서 Venues_Regions 객체가 분리되었습니다. 이제 업데이트를 저장하려고 할 때 http 게시 작업을 수행하지 않습니다. 이 일이 내가 이루고자하는 것을 정리하고 도움을 청하기를 바란다. 모든 도움과 빠른 답변에 다시 한 번 감사드립니다.
//create and update
public class Region_CU
{
public Region_CU()
{
}
public List<MapIcon> mapicons { get; set; }
//public Venues_Regions region { get; set; }
// The fields below are what makes up Veunes_Region
// this was broken out from the above Venues_Region
// because the UIHint was not being passed through
public int RegionsID { get; set; }
public string Name { get; set; }
public string CalendarLink { get; set; }
public int MapIcon { get; set; }
public DateTime? QtrStart { get; set; }
public DateTime? QtrEnd { get; set; }
[UIHint("tinymce_jquery_full"), AllowHtml]
public string FacebookLikeBox { get; set; }
public string FacebookId { get; set; }
public string mapIcon { get; set; }
}
편집 # 2 : 좋은 밤 후 솔루션 자체를 발표 잔다. 업데이트 작업에서 내가 할 일은 전달되는 래퍼에서 전달되는 Venues_Region 개체로의 변경이었습니다. 이제는 모든 것이 작동합니다.
모든 도움과 제안에 감사드립니다. 도움에 미리
감사합니다, 크리스
EF 4.1 로의 이전을 고려하셨습니까? DbContext API를 사용하면 필요한 모든 것을 쉽게 업데이트 할 수 있습니다. – tugberk