2017-05-17 86 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

相關問題