簡體   English   中英

具有部分視圖的MVC發布表單返回Null模型

[英]MVC Posting Form with Partial views returns Null Model

我一直在閱讀同一個問題的多個帖子,似乎共識是使用子模型對象和編輯器模板。 我沒有重構我的代碼來執行此操作,我仍然在帖子上返回null模型。 我無法弄清楚我哪里出錯了。 這是我的概念證明代碼:

控制器:

[HttpPost]
    public ActionResult CreateNewMatter(NewMatterModel model)
    {
        WorkflowRepository repo = new WorkflowRepository();
        repo.SaveNewMatterWorkflow(model.NewMatterIndex.ClientCode, model.NewMatterIndex.ClientName, model.NewMatterIndex.MatterCode, model.NewMatterIndex.MatterName);

        return View();
    }

主要觀點:

 @model NBI_Flow.Web.Models.ActionModels.NewMatterModel @{ ViewBag.Title = "Create New Matter"; } <div class="screen-container"> @using (Html.BeginForm("CreateNewMatter", "Action", FormMethod.Post, new { enctype = "multipart/form-data" })) { <div id="top-control-panel"> <div id="button-row"> <input type="button" id="home-button" value="Home" onclick="location.href = '@Url.Action("Index", "Home")'; return false;" /> <input type="submit" id="save-button" value="Save" /> <input type="button" id="delete-button" value="Delete" onclick="location.href = '@Url.Action("Index", "Home")'; return false;" /> <input type="button" id="submit-button" value="Submit" onclick="saveNewMatter();" /> </div> <div id="status-row"> <div class="status-block"> <label><span>Request Number:</span>013603</label><br /> <label><span>Request Status:</span>01. Draft</label><br /> <label><span>Client #:</span>27619</label> </div> <div class="status-block"> <label><span>Request Type:</span>Existing Client</label><br /> <label><span>Created On:</span>02/29/2016 09:43:10 AM</label><br /> <label><span>Client Name:</span>Greenfield Partner LLC</label> </div> <div class="status-block"> <label><span>Primary Billing Partner:</span></label><br /> <label><span>Created By:</span>Brian Legg</label><br /> <label><span>BABAC Partner:</span></label> </div> </div> </div> @Html.Hidden("SuccessUrl", Url.Action("Index", "Home")) <div id="new-matter-container"> <ul> <li><a href="#tab0" id="_tab0">Intro</a></li> <li><a href="#tab1" id="_tab1">Matter Details</a></li> <li><a href="#tab2" id="_tab2">BABAC</a></li> <li id="tab3tab"><a href="#tab3" id="_tab3">Client Relationship</a></li> <li><a href="#tab4" id="_tab4">Risk Management</a></li> <li><a href="#tab5" id="_tab5">Relevant Parties/Conflicts</a></li> <li><a href="#tab6" id="_tab6">Attachments</a></li> <li><a href="#tab7" id="_tab7">Comments</a></li> <li><a href="#tab8" id="_tab8">Audit</a></li> <li><a href="#tab9" id="_tab9">Copy Request</a></li> <li><a href="#tab10" id="_tab10">Proxies</a></li> </ul> <div id="tab0"> @Html.EditorFor(model => model.NewMatterIndex) </div> <div id="tab1"> @Html.Partial("_MatterDetails") </div> <div id="tab2"> @Html.Partial("_BABAC") </div> <div id="tab3"> @Html.Partial("_ClientRelationship") </div> <div id="tab4"> @Html.Partial("_RiskManagement") </div> <div id="tab5"> @Html.Partial("_RelevantParties") </div> <div id="tab6"> @Html.Partial("_Attachments") </div> <div id="tab7"> @Html.Partial("_Comments") </div> <div id="tab8"> @Html.Partial("_Audit") </div> <div id="tab9"> @Html.Partial("_CopyRequest") </div> <div id="tab10"> @Html.Partial("_Proxies") </div> </div> } </div> 

我知道那里有很多偏見,但我只關心第一個EditorFor。 一旦它工作,我將其余部分轉換為EditorTemplates。

EditorTemplate(部分):

 @model NBI_Flow.Web.Models.ActionModels.NewMatterIndex <div id="intro-section"> <label>Requesting Attorney:</label> <select id="attorney-list"> <option value="0">Select...</option> <option value="1">Abramowitz, Laurie</option> <option value="2">Adivari, Heather</option> <option value="3">Adler, Sara</option> <option value="4">Ainsztein, Zachary</option> <option value="5">Allardyce, Aaron L</option> <option value="6">Alten, Klaus</option> <option value="7">Alvarado, Daniela</option> <option value="8">Alyonycheva, Tatiana N</option> </select> <br /><br /> <label>Please enter the matter name:</label> <input type="text" id="matterName" /> <br /><br /> @* 100% throw away code *@ <label>Please enter the client code:</label> @*<input type="text" id="clientCode" />*@ @Html.TextBoxFor(m => Model.ClientCode) .......... 

這是我試圖發布的“Model.ClientCode”。 當我點擊提交按鈕時,我發布的模型如下所示:

在此輸入圖像描述

任何幫助是極大的贊賞。 如果我遺漏了一些重要的數據,請告訴我。 謝謝!

永遠不需要使用編輯器模板。 我不確定你在哪里得到這個建議,但應該采取一些鹽。 問題的核心歸結為分配給輸入/選擇/等的name屬性。 元素以及模型綁定器期望該名稱在POST上的內容。

對於此處的示例,要綁定ClientCode ,modelbinder需要一個名為NewMatterIndex.ClientCode的post值。 如果它是其他任何東西,例如ClientCode ,那么modelbinder將丟棄該值。

現在,在處理partials(編輯器模板是一種形式)時,它都是關於上下文的。 在某種程度上,上下文是該部分的模型,更重要的是, 不是主視圖的模型。 因此,例如,如果將Model.NewMatterIndex傳遞給partial作為模型,那么現在就是Razor在渲染部分時所具有的所有上下文。 結果,如果你做了類似的事情:

@Html.EditorFor(m => m.ClientCode)

在部分內部,生成的name屬性將只是ClientCode ,而不是NewMatterIndex.ClientCode

編輯器模板僅在EditorFor維護某些父上下文方面是部分解決方案。 當你打電話的時候:

@Html.EditorFor(m => m.NewMatterIndex)

它將使用NewMatterIndex.正確地為每個內部渲染的輸入添加NewMatterIndex. 這並不保證名稱永遠是正確的,因為可能存在其他問題。 但是,在這個特定情況下,它將解決問題。 您仍然遇到問題的原因可能是由於編輯器模板中的拼寫錯誤。 你有:

@Html.EditorFor(m => Model.ClientCode)

而那應該是:

@Html.EditorFor(m => m.ClientCode)

它們看起來很相似,但實際上意味着非常不同。 此外,雖然您的問題解決了這一特定屬性,但似乎您既為所有其他輸入手動創建HTML, 未分配任何名稱屬性。 沒有名稱,該值甚至不會被發布,更不用說綁定任何東西了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM