выпадающий список бритвы mvc3 для сбоя обновления модели - PullRequest
0 голосов
/ 10 февраля 2011

У меня проблема со следующим кодом.В основном, когда я вызываю 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>

Когда я нажимаю кнопку "Сохранить", строка обновления не работает.Как было сказано выше, это не сбой, если я использую текстовое поле для пола.Кто-нибудь знает, что делает его неудачным или как его отладить?

1 Ответ

0 голосов
/ 10 февраля 2011

Попробуйте объявить свойство MemberID как обнуляемое целое число:

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