如何从DropDownList中的项目获取ID?

时间:2015-09-24 14:05:51

标签: c# html asp.net razor

这是我上一个帖子的后续内容:How Do I Create A HTML Select With Only Items In Database In Asp.Net Razor?

如何从DropDownList中选择的项目中获取ID?这个想法是下拉列表中显示的名称连接到'CustomerId'。

http://i.imgur.com/2756GKl.png

PS 我不想用最后一个线程中的所有代码填充这个线程,因为它会变得非常混乱和混乱,所以如果你需要查看这段代码的引用,看看在另一个线程。

HTML代码

@Html.LabelFor(m => m.SelectedCustomerId)
@Html.DropDownListFor(m => m.SelectedCustomerId, Model.CustomerID)

RegisterController

[HttpPost]
public ActionResult Register(string registername, string registerpassword, string registerconfirmpassword, int customerId)
{
    if (ModelState.IsValid)
    {     
    this.customerId = Request["CustomerID"]);

    //Register new user with this information
    //Removed for clarity
    return Redirect("/");
}

1 个答案:

答案 0 :(得分:1)

再看看你如何定义下拉列表:

@Html.DropDownListFor(m => m.SelectedCustomerId

这将大致呈现为:

<select name="SelectedCustomerId" id="SelectedCustomerId"

因此,下拉列表的值将作为SelectedCustomerId=5(或选择的任何值)回发。因此,要捕获它,您需要使用相同的名称声明您的参数(不区分大小写):

[HttpPost]
public ActionResult Register(..., int selectedCustomerId)

然而,还有另一种可以说是更好的方法。请注意,您的操作中已有4个参数。这已经不是很易读了。这里更好的方法是定义一个模型类,或重用已经用于渲染视图的模型类,并使其成为您操作的唯一参数。然后只使用它的属性,因为它们将由模型绑定器填充:

[HttpPost]
public ActionResult Register(TheModelType model)
{
    model.SelectedCustomerId // to access the selected customer id