如何在MVC中向ViewModel添加自定义Web控件?

时间:2013-06-11 11:17:02

标签: asp.net asp.net-mvc-4

我在使用viewmodel的MVC应用程序中有一个视图。  视图上的所有控件都链接到viewmodel(即@html.textboxfor(model => model.ViewModel.Class)),除了一个 - 我创建的一个select控件作为级联ddl,它根据它上面的DropDownListFor的值进行更改。

如何在viewmodel中包含此自定义选择中的选定值,并将其作为FormMethod.Post的一部分传回控制器?

2 个答案:

答案 0 :(得分:1)

您可以将其绑定为动作参数

[HttpPost]
public ActionResult YourAction(YuorModel model, string fieldname)

或者您可以从FormCollection

中检索它
[HttpPost]
public ActionResult YourAction(YuorModel model, FormCollection form)
{
    var param = form["fieldname"];
}

或者只是使用控件的字段名称将此字段添加到viewmodel。

答案 1 :(得分:0)

嗯,视图模型正是为了这个。您可以在视图中添加所需的任何属性。在这种情况下,你似乎在谈论一些DropDown。要获得下拉列表,您需要2个属性:用于保存所选值的标量属性和用于保存可能值的IEnumerable<SelectListItem>

所以继续将这两个属性添加到视图模型中:

public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Values { get; set; }

然后,为视图提供服务的控制器操作应该使用所有可用值填充Values集合属性,然后将视图中的下拉列表绑定到这两个属性:

@Html.DropDownListFor(x => x.SelectedValue, Model.Values)

当然,由于您的POST操作将视图模型作为参数,因此您只需查看model.SelectedValue属性即可检索用户选择的值。