MVC 4 Dropdownlist 通过按钮传递值?

MVC 4 Dropdownlist Pass value by button?

我使用 html 助手创建了一个下拉列表。 它能够获取值并绑定到下拉列表。

如何将选定的下拉值传递给控制器​​?

我的看法:

@Html.DropDownList("Language", new SelectList(ViewBag.LangList, "Text", "Value"))
<input type="button" class="btn" title="Filter By Language" 
    value="Filter By Language" onclick="location.href='@Url.Action("SURV_Answer_Result", "SURV_Answer", 
    new { Survey_ID = Model[0].Survey_ID, Language = ViewBag.LangList })'" />

我的控制器获取语言并绑定到下拉列表中:

public ActionResult SURV_GetLanguage(int Survey_ID)
{
  var getlanguagelist = from r in db.SURV_Question_Ext_Model
                        join s in db.SURV_Question_Model on r.Qext_Question_ID equals s.Question_ID
                        where s.Question_Survey_ID == Survey_ID
                        group new { r, s } by r.Qext_Language into grp
                        select grp.FirstOrDefault();

  foreach (var item in getlanguagelist.ToList())
  {
    List<SelectListItem> langResult = new List<SelectListItem>();
    foreach (var item2 in getlanguagelist)
    {
      SelectListItem temp = new SelectListItem();
      temp.Text = item2.r.Qext_Language;
      temp.Value = item2.r.Qext_Language;
      langResult.Add(temp);
    }
    ViewBag.LangList = langResult;
  }
  return View(ViewBag.Langlist) ;
}

我想将语言传递给下面的控制器:

 public ActionResult SURV_Answer_Result(int Survey_ID, string Language)
 {
   List<AnswerQuestionViewModel> viewmodel = new List<AnswerQuestionViewModel>();
   SURV_GetLanguage(Survey_ID);
  // do whatever i want...
}

如果您将控制器上的方法签名更改为 public ActionResult SURV_GetLanguage(int Survey_ID, string Language = null),您使用的代码将起作用。然后,您可以测试空值并根据需要进行处理。

然而,最好将下拉列表包装在一个表单中,并使用 POST 请求。类似于:

@using (Html.BeginForm("SURV_GetLanguage","ControllerName",FormMethod.Post))
{
    @Html.DropDownList("Language", new SelectList(ViewBag.LangList, "Text", "Value"))
    <input type="submit" class="btn" />
}

然后在控制器中你可以有一个新的方法:

[HttpPost]
public ActionResult SURV_GetLanguage(string Language)
{
     //Do whatever you want with language.
}

有两种方法,

1) 您可以将下拉菜单和提交按钮放入包含操作参数的表单中。按下按钮时,您的表单将提交给它的操作。您的操作必须包含名称为 'Languages' 的参数。它会给你选择的值。

动作的所有参数,如果与控件的 'name' 属性 匹配,将在表单提交时包含它们的值。

2) 您可以使用 jquery 从下拉列表中获取选定的值,然后使用 window.location 或构建 url 进行表单操作并调用提交。

您在视图中的按钮是type="button",并且您附加了一个 onclick 事件,该事件将重定向到 SURV_Answer_Result 传递原始 ViewBag 属性 回到方法(它不会绑定到 string Language 因为它的 List<SelectListItem>.

您需要一个带有 FormMethod.Get

的表格
@using (Html.BeginForm("SURV_GetLanguage", "ControllerName", new { Survey_ID = Model[0].Survey_ID }, FormMethod.Get))
{
  @Html.DropDownList("Language", (Enumerable<SelectListItem>)ViewBag.LangList)
  <input type="submit" ... />
}

备注:

  1. Survey_ID 已作为路由值添加到表单中
  2. ViewBag.LangList 就是 Enumerable<SelectListItem> 这就是全部 DropDownList() 助手需要,所以没有意义 从中创建另一个 SelectList 的额外开销 (SelectListEnumerable<SelectListItem>)