将下拉选择的值传递给Html.BeginForm()中的视图

时间:2017-05-17 16:04:52

标签: c# asp.net-mvc html.beginform

我需要将视图中的字段值传递给控制器​​。我的代码适用于文本框,但不适用于下拉列表。我见过许多Html.DropdownlistFor的答案,但没有这个案例。有没有办法可以做到这一点?

查看:

@var searchTypes = new SelectList(new[]
{
   new SelectListItem {Value = "0", Text = "Email"},
   new SelectListItem {Value = "1", Text = "Last Name"},
   new SelectListItem {Value = "2", Text = "First Name"},
}, "Value", "Text");

 @using (Html.BeginForm("Index", "Users", new { isSearch = 1, searchTerm = "SearchTerm", searchType="ddlSearchType" }, FormMethod.Post))
{
  <div class="well well-sm search">
      <div class="row">
      <div class="col-sm-6">
        <div class="form-group">
            @Html.TextBox("SearchTerm",(string)ViewBag.SearchTerm, new {name= "SearchTerm", @class = "form-control", placeholder = "Search Term" })

        </div>
    </div>

    <div class="col-sm-3">
        <div class="form-group">
            <div class="controls">
                @Html.DropDownList("ddlSearchType", searchTypes, new { id = "searchtypeselect", @class = "form-control" })

            </div>
        </div>
    </div>

    <div class="col-sm-2">
        <button class="btn btn-primary pull-right" type="submit"><i class="glyphicon glyphicon-search"></i>Search</button>
    </div>
</div>
</div>
}

控制器:

public ActionResult Index(int? isSearch,string searchTerm,string searchType)
{

}

This answer解决了同样的问题,但视图中没有文本框。

为了澄清,搜索部分只是我观点的一部分。我下面有一个分页列表。因此,我需要IsSearch字段来查看是否按下了搜索按钮,或者是否更改了页面,这也将转到相同的操作方法。

2 个答案:

答案 0 :(得分:1)

要更正值的问题,您需要向搜索列表控制器添加第四个参数,该参数应为选定值。

@var searchTypes = new SelectList(new[]
{
   new SelectListItem {Value = "0", Text = "Email"},
   new SelectListItem {Value = "1", Text = "Last Name"},
   new SelectListItem {Value = "2", Text = "First Name"},
}, "Value", "Text", selectedValueHere);

接下来,您应该更改BeginForm帮助程序并删除您在那里的路由属性。您可能没有为这些路由定义路由,并且您希望值来自表单提交,而不是您在帮助程序中发送的硬编码字符串。您也可以删除默认为POST的方法。

 @using (Html.BeginForm("Index", "Users",new { isSearch = 1 }))

最后,您需要调整下拉列表的名称,以便与POST操作所需的名称正确匹配。

@Html.DropDownList("SearchType", searchTypes, new { id = "searchtypeselect", @class = "form-control" })

答案 1 :(得分:1)

答案就在您发布的链接中。您需要从Html.BeginForm中删除下拉列表参数,并在控制器和下拉列表名称中使用相同的字符串。

@using (Html.BeginForm("Index", "Users", new { isSearch = 1, searchTerm = "SearchTerm"}, FormMethod.Post))


public ActionResult Index(int? isSearch,string searchTerm,string ddlSearchType)
{

}