我正在显示控制器的下拉列表,如下所示:
public ActionResult Index()
{
var title = new List<String>()
{
"English", "French", "Spanish"
};
List<SelectListItem> languageList = new List<SelectListItem>();
string defaultTitle = "Language";
foreach (var item in title)
{
languageList.Add(new SelectListItem()
{
Text = item,
Value = item,
Selected = (item == defaultTitle ? true : false)
});
}
ViewBag.LanguageList = languageList;
return View();
}
我的观点如下:
@using (Html.BeginForm("GetStatusTrad", "StatusTradController", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Translation</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.Label("Language")
@Html.DropDownList("lang", new SelectList(ViewBag.LanguageList, "Text", "Value"), "Language")
</div>
</div>
<div></div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
}
它正确显示下拉列表,但是当我想将所选值传递给控制器的操作时,我收到404错误。
我的行动是:
public ActionResult GetStatusTrad(string language)
{
*some code*
}
我知道为什么我无法将下拉列表的选定值传递给控制器?
答案 0 :(得分:2)
你的助手应该是:
@Html.DropDownList("language", <-- note this
new SelectList(ViewBag.LanguageList, "Text", "Value"), "Language")
基本上你的助手会被渲染为这样的输入:
<select name="language">
...
</select>
在form
POST上,您的控制器将能够根据输入的name
属性绑定您的值。
答案 1 :(得分:1)
@Html.DropDownList("lang", new SelectList(...
生成<select>
name="lang
。您需要更改POST方法中的参数以匹配
public ActionResult GetStatusTrad(string lang)
作为附注,LanguageList
已经IEnumerable<SelectListItem>
,因此使用new SelectList()
创建另一个相同的内容是毫无意义的。我可以只是
@Html.DropDownList("lang", (IEnumerable<SelectListItem>)ViewBag.LanguageList, "Language")
您在BeginForm()
方法中也有拼写错误。它必须是
@using (Html.BeginForm("GetStatusTrad", "StatusTrad", FormMethod.Post))
即。 "StatusTrad"
,而不是"StatusTradController"
(除非您确实将控件命名为StatusTradControllerController
)
答案 2 :(得分:1)
您可以使用强类型视图返回选定的下拉列值。
创建简单的类,如下所示
public class myModel
{
public string language { get; set; }
....
....
}
然后在查看
中使用此类/模型@model yourProject.Models.myModel
<div class="form-group">
<label class="col-lg-2 control-label">Language</label>
<div class="col-lg-5">
@Html.ValidationMessageFor(m => m.language)
@Html.DropDownListFor(m => m.language, new SelectList(ViewBag.LanguageList, "Text", "Value"), "-- Select --", new { @class = "form-control" })
</div>
</div>
控制器方法如下所示
[HttpPost]
public ActionResult GetStatusTrad(myModel model)
{
*some code*
}