我的應用程序中有一對視圖,它們都顯示了我的模型項目的相同編輯器模板; (「添加」和「編輯」),「編輯」工作正常,但是當我的控制器動作處理帖子時,「添加」對模型返回空值。ASP.NET MVC - 表單返回空模型,除非模型被包裝在自定義視圖模型中
我發現如果我給「自定義ViewModel」添加視圖並調用Html.EditorFor(p => p.PageContent)
而不是簡單地調用EditorFor()在整個Model對象-上,那麼表單將返回正確的非null模型,但這會產生與我的客戶端腳本和控件ID有關的其他問題(因爲現在所有字段都以「PageContent_」爲前綴)。我在整個應用程序的幾個不同位置使用了相同的編輯器模板技術,其他人都沒有在ViewModel上展示這種奇怪的依賴關係。
有沒有其他人遇到過類似的問題?
編輯視圖
<%@ Page Title="" Language="C#" MasterPageFile="~/Areas/Admin/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<PageContent>" %>
<% using (Html.BeginForm())
{ %>
<%=Html.Hidden("PageID", Model.Page.ID) %>
<%=Html.EditorFor(p => p)%>
<input type="submit" name="btnSave" value="Save" />
<input type="submit" name="btnCancel" value="Cancel" class="cancel" />
<% }
操作(工作)
[HttpPost, ValidateInput(false)]
public ActionResult EditContent(int id, FormCollection formCollection) {}
添加視圖
<%@ Page Title="" Language="C#" MasterPageFile="~/Areas/Admin/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<PageContent>" %>
<% using (Html.BeginForm())
{ %>
<%=Html.Hidden("PageID", ViewData["PageID"]) %>
<%=Html.EditorFor(p => p)%>
<input type="submit" name="btnSave" value="Save" />
<input type="submit" name="btnCancel" value="Cancel" class="cancel" />
<% } %>
動作(不及格)
// content is ALWAYS null
[HttpPost, ValidateInput(false)]
public ActionResult AddContent(PageContent content, FormCollection formCollection) {}
之前你哭 「重複」
這個問題確實涉及到this one,但這個問題的目的是針對具體的問題我體驗,而不是在那裏提出更普遍的問題。
嘗試刪除「FormCollection」。這不是必需的。 – 2009-11-30 18:03:35
如果我錯了,請更正我的錯誤,但是您是否需要前綴在默認模型聯編程序中工作?還是你忘記在參數上設置綁定屬性? – Min 2009-11-30 18:04:41
@Daniel:我使用FormCollection來檢查被點擊的「取消」按鈕以及一些額外的信息,這些信息都在模型之外。我幾乎在每一次添加/編輯操作中都一直使用相同的簽名而不會失敗。 – 2009-11-30 18:26:19