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" ... />
}
备注:
Survey_ID
已作为路由值添加到表单中
ViewBag.LangList
就是 Enumerable<SelectListItem>
这就是全部
DropDownList()
助手需要,所以没有意义
从中创建另一个 SelectList
的额外开销
(SelectList
是 Enumerable<SelectListItem>
)
我使用 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" ... />
}
备注:
Survey_ID
已作为路由值添加到表单中ViewBag.LangList
就是Enumerable<SelectListItem>
这就是全部DropDownList()
助手需要,所以没有意义 从中创建另一个SelectList
的额外开销 (SelectList
是Enumerable<SelectListItem>
)