mvc 3 dropdownlistfor - 选定的值始终为null

时间:2012-08-25 11:43:52

标签: asp.net-mvc-3 razor-declarative-helpers

我有这样的下拉列表:

public class RegionLine
    {
        public Nullable<int> regionId { get; set; }
        [Display(Name = "Województwo: ")]
        public string regionName { get; set; }
    }

和控制器:

public PartialViewResult getPersonalData()
        {
            var d = rm.GetAllRegionsMapper();
            ViewBag.Regions = new SelectList(rm.GetAllRegionsMapper().ToList(), "regionId", "regionName", "-- select item --");
            var user = um.GetUserByLoginMapper(User.Identity.Name);

            return PartialView("getPersonalData", user);
        }

[HttpPost]
        public PartialViewResult UpdatePersonalData(UserLine user)
        {
            var usr = um.GetUserByLoginMapper(User.Identity.Name);
            ViewBag.Regions = new SelectList(rm.GetAllRegionsMapper().ToList(), "regionId", "regionName",  "-- select item --");

            if (ModelState.IsValid)
            {
                int status = uda.UpdateEmployeesPersonalData(user.UserId, user.PersonalData.Name, user.PersonalData.LastName,
                    user.Address.City, user.Address.Street, user.Address.Region.regionId, user.Address.PostCode,
                    user.PersonalData.KeyWord);
                return PartialView("getLabelsPersonalData", user);
            }

            return PartialView("getPersonalData", usr);
        }

我的下拉列表中的部分视图:

<tr>
            <td>@Html.LabelFor(a => a.Address.Region.regionName)</td>
            <td>@Html.DropDownListFor(a => a.Address.Region.regionId,    (SelectList)ViewBag.Regions)</td>

        </tr>

当我选择一些项目时,在httppost上,regionId始终为null。请帮忙。

1 个答案:

答案 0 :(得分:1)

rm.GetAllRegionsMapper().ToList()很可能会返回一个包含所有regionId == null的列表。

此外,为什么您是否已将regionId定义为可为空?它始终是您从DropDownList0选择的密钥,如果选择了非,则无理由将其作为null

您很可能会在下拉列表中的关键字regionId与您在选择并发回选择后尝试获取的regionId之间产生混淆。将后者称为selectedRegionId以避免混淆。

希望这些想法可以引导您找到正确的方向并帮助您将问题本地化。