mvc3 razor dropdownlistfor导致更新模型失败

时间:2011-02-10 13:40:47

标签: asp.net-mvc-3 razor updatemodel html.dropdownlistfor

我遇到以下代码问题。基本上当我调用updatemodel它失败但我没有得到内部异常。如果我将下拉菜单更改为文本框,则可以正常工作。

类:

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行失败。如上所述,如果我使用性别文本框,它不会失败。有谁知道是什么让它失败或如何调试它?

1 个答案:

答案 0 :(得分:0)

尝试将MemberID属性声明为可以为空的整数:

[Key]
public int? MemberID { get; set; }