我的视图中有一个下拉列表,其他一些控件和一个用于保存数据的输入按钮。 保存时我有ActionReult Save() 这需要我在下拉列表中选择的值。 如何在控制器上获取下拉列表的选定值Actionresult Save()
View:
------
Collapse | Copy Code
var docTypes = Model.DocumentTypes.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString()}).AsEnumerable();
@Html.DropDownList("SelectedDocumentType", docTypes, "--select--", new { @class = "ddSelect" })
Model:
-----
Collapse | Copy Code
public IEnumerable DocumentTypes { get; set; }
Controller:
-----------
Collapse | Copy Code
[HttpParamAction]
[HttpPost]
[ValidateInput(false)]
public ActionResult Save()
{
int DocumentType = // I have to assign the selected value of the dropdownlist here
}
答案 0 :(得分:1)
向模型添加属性以存储值。我假设id是一个int,你不需要像现在这样使用ToString()。所以在你的模型中添加:
public int DocumentTypeId {get;set;}
然后你应该使用HtmlHelper方法将下拉列表绑定到值DropDownListFor。这给你:
@Html.DropDownListFor(model => model.DocumentTypeId, new SelectList(Model.DocumentTypes, "Id", "Name"), "--select--", new { @class = "ddSelect" })
您可以删除docTypes变量创建和初始化。
编辑:我注意到的另一个问题是你的控制器方法Save()没有任何参数。为了能够读取POSTed数据,您需要将模型作为参数。因此,如果它被称为MyModel,您的控制器方法的签名将是:
public ActionResult Save(MyModel model)
然后将值分配给您想要的变量只是:
int DocumentType = model.DocumentTypeId;
答案 1 :(得分:0)
尝试使用int.Parse(drop.SelectedValue)
或int.Parse(drop.SelectedValue.Trim())
代替Int32.Parse(drop.SelectedValue.ToString())
。 drop.SelectedValue已经是字符串格式,因此您无需使用ToString