2015-07-10 25 views
3

我想發佈頁面的一部分並將其綁定到控制器上查看模型。我對SearchVM編輯模板:MVC-Post Page部分 - 模型綁定失敗

@Html.TextBoxFor(model => model.TestText, new { @class = "form-control ", 
       @placeholder = "TEXT" , @id="test" }) 
<input type="submit" value="Submit" /> 

Index.cshtml:

@using (Html.BeginForm("Search", "Pencil", FormMethod.Post, 
         new { enctype = "multipart/form-data" })) 
{ 
    @Html.EditorFor(model => model.SearchVM); 
} 

控制器:

public ActionResult Search(SearchVM vm) 
    { 
    // ... 
    } 

當我輸入該testText文本框的東西,點擊提交,我到了行動搜索但vm.TestText爲空,我無法將表單字段從編輯器模板綁定到視圖模型。任何想法?

+0

顯示您的模型 –

+0

public class SearchVM public string TestText {get;組; } } 現在我想用Ajax.BeginForm代替HTML,BeginForm,但結果相同 – user2026343

+0

我認爲這是因爲你覆蓋了文本框ID。發佈表單時,輸入的id必須提供給模型屬性名稱,以使默認模型聯編程序可以工作。嘗試刪除:@ id =「test」 –

回答

4

發生這種情況,因爲隨着@model傳遞給您的視圖類包裝SearchVM類,當你調用@Html.EditorFor(model => model.SearchVM)它呈現輸入一個前綴SearchVM

<input id="SearchVM_TestText" name="SearchVM.TestText" value="" ... /> 

反過來,當調回控制器方面,ModelBinder將無法​​反序列化到SearchVM

這是你可以做的是使用this EditorFor超載:

@Html.EditorFor(model => model.SearchVM, "_SearchVM", ""); 

其中_SearchVM是您的編輯器模板的名稱。通過""作爲htmlFieldName參數將刪除輸入上不需要的SearchVM前綴。

+0

這正是問題所在,非常感謝! – user2026343

+1

@ user2026343如果此答案解決了您的問題,請執行Stack Overflow並將其標記爲已接受:) –