DropDownList对于模型中的默认选定项

时间:2014-09-18 20:44:07

标签: c# asp.net asp.net-mvc razor

我有一个DropDownListFor绑定到模型成员以及可供选择的项列表。绑定到这个成员的工作,但我似乎无法弄清楚如何在页面加载时显示模型的当前值。

查看

@Html.DropDownListFor(model => model.MethodofPayment, (List<SelectListItem>)ViewBag.statuses)

控制

List<SelectListItem> statuses = new List<SelectListItem>();
statuses.Add(new SelectListItem { Text = "Approved", Value = "Approved" });
statuses.Add(new SelectListItem { Text = "Declined", Value = "Declined" });
statuses.Add(new SelectListItem { Text = "Pending", Value = "Pending" });
ViewBag.ClaimStatus = statuses;

添加optionLabel参数不起作用并返回空值,并且传入SelectListItem作为optionLabel参数也不起作用。

@Html.DropDownListFor(model => model.MethodofPayment, (List<SelectListItem>)ViewBag.methodofpayment, model.MethodOfPayment)

如果页面不更改列表项,我希望页面提交相同的值。

编辑:
谢谢你们,一定是名字冲突。 我搞砸了一下我的问题,因为我有两个下拉列表,我必须复制错误的一个。

变更代码:
控制器:

List<SelectListItem> statuses = new List<SelectListItem>();
statuses.Add(new SelectListItem { Text = "Approved", Value = "Approved" });
statuses.Add(new SelectListItem { Text = "Declined", Value = "Declined" });
statuses.Add(new SelectListItem { Text = "Pending", Value = "Pending" });
ViewBag.ClaimStatuses = statuses;

查看:

@Html.DropDownListFor(model => model.ClaimStatus, (List<SelectListItem>)ViewBag.ClaimStatuses)

将其复数并且有效。

2 个答案:

答案 0 :(得分:3)

有时可能会发生这样的情况:您可能对不同的控件/变量使用了相同的名称,并且可能会相互冲突。

在您的情况下,模型属性名称MethodofPayment和ViewBag名称methodofpayment会导致冲突。

尝试将ViewBag名称更改为ViewBag.paymentmode并尝试使用。

@Html.DropDownListFor(model => model.MethodofPayment, (List<SelectListItem>)ViewBag.paymentmode)

答案 1 :(得分:0)

请确保您只有一个名为“model.MethodofPayment”的控件。

@Html.DropDownListFor(model => model.MethodofPayment, (List<SelectListItem>)ViewBag.methodofpayment)
在你的post方法中使用视图中的名称

  [HttpPost]
     public ActionResult yourAction(classname ClassModel)
    {
    }

确保名称“ClassModel”在视图中相同