我有三個級聯下拉使用Ajax填充自己的視圖。同樣在視圖中,我調用一個迭代模型中的容器的局部視圖,並且爲每個項目調用另一個局部視圖,根據下拉列表中選定的項目顯示適當的編輯模型屬性。我構建了一個複雜的模型,其中包含下拉選項以及要編輯的屬性,並將模型的部分傳遞到顯示要編輯的屬性所需的最低級別部分。MVC 4模型沒有返回到控制器
我想在用戶通過正常的Html.BeginForm而不是通過使用Ajax單擊提交按鈕時更新數據庫。因此,我必須只包裝顯示錶單中屬性的部分,以便現有的Ajax功能不會發布到控制器。問題是,儘管我可以構建這一切,並且提交按鈕按預期連接到控制器,但模型返回到控制器null。
模型不是通過建立它們的路徑從部分回來的嗎?或者更準確地說,即使使用partials構建模型,模型是否仍然保留在頁面上?
我相信有人會建議我使用Ajax回發,但這不是我的最佳選擇。或者有人可能會問網頁上的html是什麼樣子。奇怪的是,我只能使用瀏覽器開發工具看到完整的html,它並沒有顯示在查看源代碼中。
任何想法?
把它移到它所屬的地方:
我不確定我的理解。我知道返回的模型需要匹配預期的模型,但我沒有得到上面的解釋。你說:「所以,如果你的控制器看起來像這樣:」,當然是這樣,那麼是什麼?那是錯的? 我要看看在開發工具Chrome瀏覽器,看看實際的HTML輸出,我看到這在一個案件:
<input class="text-box single-line" id="status_Comments" name="status.Comments" type="text" value="Last Install to be completed this weekend">
因此,如果「名」標籤需要尋找合適的,我認爲它。我錯了嗎?
我的日期字段是這樣的:
<input type="text" value="8/19/2014" class="datepicker hasDatepicker" id="dp1391795955619">
所以沒有「名」的標籤,但確實有一個ID。我需要添加一個名字嗎?
下面的代碼生成上述:
@foreach (Status status in Model) {
string date = status.Date.HasValue ? status.Date.Value.ToShortDateString() : string.Empty;
<tr>
<td style="width: 175px;">@Html.DisplayFor(model => status.Name)</td>
<td style="width: 75px;">@Html.DisplayDropdownColorFor(model => status.StatusValue)</td>
<td style="width: 80px;"><input type="text" value="@date" class="datepicker" /></td>
<td style="width: 80px;"><input type="text" value="" class="datepicker" /></td>
<td style="width: 375px;">@Html.EditorFor(model => status.Comments)</td>
</tr>
}`
吉茲,我聽起來像一個絕望的白癡。 感謝您的幫助。
這是很多的描述和...沒有代碼。你能提供這個問題的一個有效的例子嗎?模型綁定不是一個真正的黑盒子。您發佈的表單中有哪些表單元素?什麼鍵/值對發佈到服務器?他們是你期望的嗎?它們是否與你期望的模型結構相匹配? – David
我希望避免發佈代碼,它相當複雜。表單元素都是文本框,沒有更復雜的字符串和日期。該模型是基於上一次選擇的每個下拉列表的選項列表,最後一個選項觸發一個db查詢,該查詢使用字符串填充模型的其餘部分。 – leemid
我認爲你錯過了這一點。這不是概念上的形式代表的問題。這是POST請求中發送的實際鍵/值對的問題。那些需要映射到模型類的物理(而非概念)結構。沒有一個可以分享的例子,你是唯一可以證實這種情況的人。 – David