2012-04-24 19 views
1

我的窗體沒有返回空模型。我試圖從顯示所述模型的細節但返回空值的窗體返回模型

我在「詳細信息」頁面上查看特定模型的詳細信息,然後,如果用戶按下SubmitPost按鈕,視圖應返回模型。

查看

@model MyApp.Models.MyModel 
@using (Html.BeginForm("ApplyUsingDetails", "Controller", FormMethod.Post)) 
{ 
    <fieldset> 
     <legend>Course</legend> 
     <div class="display-label">MyModel ID</div> 
     <div class="display-field"> 
      @Html.DisplayFor(model => model.CourseID) 
     </div> 

     <div class="display-label">Title</div> 
     <div class="display-field"> 
      @Html.DisplayFor(model => model.Title) 
     </div> 
     etc. . . 

     <p><input type="submit" value="SubmitPost" /></p> 

     <more misc information for the view> 
    </fieldset> 
} 

行動

[HttpPost] 
public ActionResult ApplyUsingDetails(MyModel model) 
{ 
// when I try to access model here it comes up null 
} 

給一些背景:我用這種形式,讓學生觀看一類的細節,然後應用到只需點擊一個按鈕即可完成課程。

任何線索爲什麼我的模型將爲空?

回答

1

根據您提供的樣本,它看起來並不像您在表格中包含任何MyModel的字段。作爲測試,請嘗試使用隱藏字段或使用@Html.HiddenFor(model => model.CourseID)並查看是否有任何發佈的值。

+0

隱藏的值在顯示頁面的源代碼返回適當的值,但我仍然返回null,是否有一個特定的地方,我會把@ Html.HiddenFor。 。 。使其工作? – Ecnalyr 2012-04-24 17:28:26

+1

'@ using'部分應該足夠了,至少要查看你是否發佈了任何值。 – 2012-04-24 17:48:09

+0

在我擺弄這裏的東西后開始工作 - 似乎是答案。 – Ecnalyr 2012-04-24 18:09:30

0

您需要在表單中包含輸入元素,以便將它們發佈到您的控制器並綁定到您的控制器模型。 ASP.NET中的模型綁定MVC採用您提交的表單值並在您的控制器模型上查找具有相同名稱的屬性,並嘗試使用表單值設置這些值。模型綁定無法嵌入控制器的模型中,表單中沒有任何輸入字段。

我會建議使用只讀樣式輸入元素與CSS樣式看起來像div.display-field

<div class="display-label">Course ID</div> 
    <div> 
     @Html.TextBoxFor(model=>model.CourseID, new{readonly="readonly", @class="display-field"}) 
    </div> 

根據頁面上的其他樣式,可能需要或不需要包裝div中的輸入。

0

DisplayFor HTML幫助程序將簡單地返回一個通常代表Property屬性值的字符串。如果你的屬性是一個布爾類型,它將把它渲染爲禁用的複選框。只要你沒有任何輸入控件,你就不會獲得價值。因此,在這種情況下,您可以簡單地使用@Html.HiddenFor HTML助手方法。

HTML.HiddenFor helper方法生成HTM標記爲隱藏的id和名字一樣的表達

@using (Html.BeginForm("ApplyUsingDetails", "Controller", FormMethod.Post)) 
{ 
    <div class="display-label">MyModel ID</div> 
    <div class="display-field"> 
     @Html.DisplayFor(model => model.CourseID) 
     @Html.HiddenFor(m=>m.CourseId) 
    </div> 
    <input type="submit" value="Save" /> 
} 

現在課程id的值將在您的HTTPPost操作方法類型的輸入元素。