2017-05-17 42 views
-1

我需要将视图中的字段值传递给控制器​​。我的代码适用于文本框,但不适用于下拉菜单。我已经看到许多Html.DropdownlistFor的答案,但没有为这种情况。有什么办法可以做到这一点?将下拉选定值传递给Html.BeginForm()中的视图

查看:

@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字段来查看搜索按钮是否被按下,或者如果它是页面的更改,也将转到相同的操作方法。

回答

1

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

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


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

} 
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" }) 
+0

我仍然需要IsSearch参数,它不是任何控件的一部分。它可以帮助我查看搜索按钮是否被点击过。所以不能拿出你的建议等所有参数。 – TheFallenOne

+0

为什么你需要知道? POST行为不会表明这一点吗? –

+0

请检查最近2行中的最新编辑。 – TheFallenOne

相关问题