C# 如何在操作中获取选定的drow下拉列表值?

C# 如何在操作中获取选定的drow下拉列表值?,c#,asp.net,.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,.net,Asp.net Mvc,Asp.net Mvc 4,在MVCWeb应用程序中,它是一个具有强类型模型的视图,其中下拉列表由模型生成/绑定 以下是查看代码: @model LoanViewModel <form class="wrapper minheight homeloan-form border-top" id="homeloan-form" method="post" action="LeadContact" novalidate="novalidate"> <p>@Html.ValidationSumma

在MVCWeb应用程序中,它是一个具有强类型模型的视图,其中下拉列表由模型生成/绑定

以下是查看代码:

@model LoanViewModel    
<form class="wrapper minheight homeloan-form border-top" id="homeloan-form" method="post" action="LeadContact" novalidate="novalidate">

<p>@Html.ValidationSummary()</p>
<p>Select an Item : @Html.DropDownListFor(x => x.HomeLoanLead.Items, new SelectList(Model.HomeLoanLead.Items), "--Choose any Item--")</p>

<div class="formnav row">
            <button class="">Show Top Home Loans <i class="fa fa-chevron-right"></i></button>    
        </div>
</form>
@model LoanViewModel
@Html.ValidationSummary()

选择一个项目:@Html.DropDownListFor(x=>x.HomeLoanLead.Items,新建SelectList(Model.HomeLoanLead.Items),“--选择任何项目--”)

显示顶级住房贷款
在I m型中,下拉列表的硬编码选项:

 public List<string> Items 
    { 
        get { _items = new List<string>(); 
            _items.Add("One"); 
            _items.Add("Two"); 
            _items.Add("Three"); 
            return _items; 
        } 
    }
公共列表项
{ 
获取{u items=newlist();
_项目。添加(“一”);
_项目。添加(“两”);
_项目。添加(“三”);
退货(物品);;
} 
}

在回发时,我无法在下拉列表中获取所选值。请指导我如何在post操作中选择哪个下拉值。

使用
Html.DropDownFor()
显示选项列表并绑定到属性的简单示例:

模型

控制器

public ActionResult Edit()
{
  LoanViewModel model = new LoanViewModel();
  model.Item = "Two"; // this will now pre-select the second option in the view
  ConfigureEditModel(model);
  return View(model);
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(LoanViewModel model)
{
  if (!ModelState.IsValid)
  {
    ConfigureEditModel(model); // repopulate select list
    return View(model); // return the view to correct errors
  }
  // If you want to validate the the value is indeed one of the items
  ConfigureEditModel(model);
  if (!model.ItemList.Contains(model.Item))
  {
    ModelState.AddModelError(string.Empty, "I'm secure!");
    return View(model);
  }

  string selectedItem = model.Item;
  ....
  // save and redirect
}

private void ConfigureEditModel(LoanViewModel model)
{
  List<string> items = new List<string>() { "One", "Two", "Three" };
  model.ItemList = new SelectList(items); // create the options
  // any other common stuff
}
public ActionResult Edit()
{
LoanViewModel模型=新的LoanViewModel();
model.Item=“Two”//现在将在视图中预先选择第二个选项
ConfigureEditModel(模型);
返回视图(模型);
}
[HttpPost]
[ValidateAntiForgeryToken]
公共行动结果编辑(LoanViewModel模型)
{
如果(!ModelState.IsValid)
{
ConfigureEditModel(model);//重新填充选择列表
返回视图(模型);//返回视图以更正错误
}
//如果您想验证该值,则该值确实是其中一项
ConfigureEditModel(模型);
如果(!model.ItemList.Contains(model.Item))
{
AddModelError(string.Empty,“我很安全!”);
返回视图(模型);
}
字符串selectedItem=model.Item;
....
//保存和重定向
}
私有void配置EditModel(LoanViewModel模型)
{
列表项=新列表(){“一”、“二”、“三”};
model.ItemList=new SelectList(items);//创建选项
//还有其他普通的东西吗
}
看法

@model LoanViewModel
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@DisplayFor(m=>m.Item)
@DropDownListFor(m=>m.Item,Model.ItemList),“--选择任何项目--”)
@Html.ValidationMessageFor(m=>m.Item)
}

至少你需要一个属性
项的setter
,但是你应该有一个属性用于
选择列表
,一个属性用于你想要绑定到的对象(将包含所选值)@StephenMuecke谢谢,你能解释一下这是如何做到的吗。我的意思是,如果我在项目中添加一个setter,它会得到选中的值吗?或者,如果我添加另一个属性,将如何为其指定选定值?非常感谢谢谢,这真的很有效,而且很好。但如果你能再多给我一点指导,我怎么能把验证放在这里呢?只是为了确保用户不会修改HTML并尝试推送新字符串。请指导我应该在模型中的何处添加属性以及添加哪个属性。非常感谢。如果您喜欢,我可以将其作为一个单独的问题发布。您的意思是添加验证,验证
必须有一个值(不能为null或空字符串)?我将使用
必需的基本验证更新答案。至于确保它是集合中的一个值,您可以添加一个
[RegularExpression]
属性,或者只需检查该值是否是POST方法中的一个有效项(如果不是,则添加一个
ModelStateError
并返回视图
应该这样做,但这不是一种非常灵活的方法(如果您更改集合,还需要更改正则表达式)
public ActionResult Edit()
{
  LoanViewModel model = new LoanViewModel();
  model.Item = "Two"; // this will now pre-select the second option in the view
  ConfigureEditModel(model);
  return View(model);
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(LoanViewModel model)
{
  if (!ModelState.IsValid)
  {
    ConfigureEditModel(model); // repopulate select list
    return View(model); // return the view to correct errors
  }
  // If you want to validate the the value is indeed one of the items
  ConfigureEditModel(model);
  if (!model.ItemList.Contains(model.Item))
  {
    ModelState.AddModelError(string.Empty, "I'm secure!");
    return View(model);
  }

  string selectedItem = model.Item;
  ....
  // save and redirect
}

private void ConfigureEditModel(LoanViewModel model)
{
  List<string> items = new List<string>() { "One", "Two", "Three" };
  model.ItemList = new SelectList(items); // create the options
  // any other common stuff
}
@model LoanViewModel
@using (Html.BeginForm())
{
  @Html.AntiForgeryToken()
  @Html.ValidationSummary(true)

  @Html.DisplayFor(m => m.Item)
  @Html.DropDownListFor(m => m.Item, Model.ItemList), "--Choose any Item--")
  @Html.ValidationMessageFor(m => m.Item)

  <input type="submit" value="Submit" />
}