如何将所选下拉列表的值从视图传递到控制器

时间:2014-10-23 16:19:24

标签: c# model-view-controller

我的视图中有一个下拉列表,其他一些控件和一个用于保存数据的输入按钮。     保存时我有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
    }

2 个答案:

答案 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

进行转换