HY,
我是ASP.NET MVC 5的新手。我试图获得HTML选择的价值而没有成功。
我的观点(重要部分):
<div class="form-group">
@Html.Label("Country", new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.DropDownList("Countries", (IEnumerable<SelectListItem>)ViewBag.Countries, new { @class = "form-control", id = "Country", name = "Country" })
</div>
</div>
我的控制器(必不可少的部分):
public ActionResult Index()
{
string country = Request["Country"]; // here I always get null
}
我需要一个新手解释为什么这不起作用以及我如何让它工作,请:)
答案 0 :(得分:2)
首先,我同意@Maess。不要使用ViewBag
。这太可怕了,微软的某个人应该被打耳光,因为它首先要把它作为一个选项加入。
那就是说,你的错误在这里非常明显。您将您的选择命名为“国家/地区”,并且您尝试从请求中提取“国家/地区”。
既然你是新手,我会很高兴,并为此安排如何使用视图模型。首先,创建一个模型:
public class IndexViewModel
{
public int SelectedCountry { get; set; }
public IEnumerable<SelectListItem> CountryChoices { get; set; }
}
然后在你的行动中:
// GET
public ActionResult Index()
{
var model = new IndexViewModel();
// get your country list somehow
// where `Id` and `Name` are properties on your country instance.
model.CountryChoices = countries.Select(m => new SelectListItem { Value = m.Id, Text = m.Name });
return View(model);
}
在你看来:
@model Namespace.IndexViewModel
...
@Html.DropDownListFor(m => m.SelectedCountry, Model.CountryChoices, new { @class = "form-control" })
最后,在你的POST动作中:
[HttpPost]
public ActionResult Index(IndexViewModel model)
{
// use model.SelectedCountry
}