0
다음 코드에 문제가 있습니다. 기본적으로 내가 updatemodel을 호출하면 실패하지만 내부 예외가 발생하지 않습니다. 드롭 다운을 텍스트 상자로 변경하면 작동합니다.mvc3 면도기 드롭 다운 목록으로 인해 업데이트 모델이 실패 함
클래스 :
public class Member
{
[Key]
public int MemberID { get; set; }
[StringLength(50),Required()]
public string Name { get; set; }
[Range(0,120)]
public short Age { get; set; }
[Required(),MaxLength(1)]
public string Gender {get; set;}
[Required()]
public virtual Team Team { get; set; }
}
컨트롤러 방법 :
[HttpGet]
public ActionResult ViewMember(int id)
{
try
{
var m = db.GetMember(id);
var maleItem = new SelectListItem{Text = "Male", Value= "M", Selected=m.Gender == "M"};
var femaleItem = new SelectListItem{Text = "Female", Value="F", Selected=m.Gender == "F"};
List<SelectListItem> items = new List<SelectListItem>();
items.Add(maleItem);
items.Add(femaleItem);
var genders = new SelectList(items, "Value", "Text");
ViewBag.Genders = genders;
return View(m);
}
catch (Exception ex)
{
return View();
}
}
[HttpPost]
public ActionResult ViewMember(Member m)
{
try
{
var member = db.GetMember(m.MemberID);
m.Team = db.GetTeam(member.Team.TeamID);
UpdateModel(member);
db.Save();
return RedirectToAction("ViewMembers", new { id = member.Team.TeamID });
}
catch (Exception ex)
{
return View();
}
}
마지막 cshtml 코드 :
@model GreenpowerAdmin.Models.Member
@using GreenpowerAdmin.Helpers
@{
ViewBag.Title = "ViewMember";
}
<h2>ViewMember</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Member</legend>
@Html.HiddenFor(model => model.MemberID)
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Team.Name)
</div>
<div class="editor-field">
@Html.DisplayFor(model => model.Team.Name)
@Html.ValidationMessageFor(model => model.Team.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Age)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Age)
@Html.ValidationMessageFor(model => model.Age)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Gender)
</div>
<div class="editor-field">
@Html.DropDownList("Gender", ViewBag.Genders as SelectList)
@Html.ValidationMessageFor(model => model.Gender)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "ViewMembers", new { id=Model.Team.TeamID })
</div>
나는 updatemodel 라인이 실패 저장 버튼을 클릭합니다. 위에서 말했듯이,성에 텍스트 상자를 사용하면 실패하지 않습니다. 누구든지 실패하게 만들거나 디버깅하는 방법을 알고 있습니까? null 허용 정수로 MemberID
속성을 선언
또한 가장 좋은 방법은 당신이 전송되지 않아야 도메인 모델이보기에 직접 객체. 뷰가 표시/기능해야하는 데이터를 캡슐화하는 ViewModel 객체를 만들어야합니다. –