2010-07-09 68 views
0

我有:
1)在MVC使用複雜的模型2

public class Model 
{ 
    public String Name { get; set; } 
    public SubModel SubModel { get; set; } 
} 

2)

public SubModel 
{ 
    public String Title { get; set; } 
} 

3)型號類型的ModelViewUserControl
4)子模型類型的SubModelViewUserControl
5) Page

我需要:
顯示在頁面2 TextBoxes:for Model.Name and Model.SubModel.Title

我做的:
1)頁:

<% Html.RenderPartial("ModelViewUserControl", Model); %> 

2)在ModelViewUserControl:

<%= Html.TextBoxFor(m => m.Name) %> 
<% Html.RenderPartial("SubModelViewUserControl", Model.SubModel); %> 

3)在SubModelViewUserControl:

<%= Html.TextBoxFor(m => m.Title) %> 

結果是
在控制研究呃的方法我有Model.Name ==「Bla」,但Model.SubModel == null。 當然,我使用Html.BeginForm()。

HTML:

<input id="Name" name="Name" type="text" value="" />
<input id="Title" name="Title" type="text" value="" />

+0

事實是在控制器的操作(在文本框中輸入一些信息並提交後)Model.Name ==「Name」,但Model.SubModel == null – 2010-07-09 20:40:45

+0

您可以編輯您的帖子。當你這樣做時,添加一個問題。 – 2010-07-09 20:46:35

回答

1

而不是使用RenderPartial我會建議你使用editor templates這將使您的生活更輕鬆:

在主視圖:

<% using (Html.BeginForm()) { %> 
    <%= Html.EditorForModel() %> 
    <input type="submit" value="OK" /> 
<% } %> 

編輯模板模型(~/Views/Shared/EditorTemplates/Model.ascx):

<%= Html.TextBoxFor(x => x.Name) %> 
<%= Html.EditorFor(x => x.SubModel) %> 

SubModel的編輯器模板(~/Views/Shared/EditorTemplates/SubModel.ascx):

<%= Html.TextBoxFor(m => m.Title) %> 
1

確保你的兩個動作方法使用的模型SAME數據類型。

您的視圖可以顯示這樣的文本字段:

<%: Html.TextBoxFor(m => m.Name) %> 
<%: Html.TextBoxFor(m => m.SubModel.Title) %> 

如果您需要更多的幫助,發表您的行爲方式和你的看法。

+0

Action方法具有簽名(模型模型),並且它成功獲取模型的Name屬性,但它沒有得到Model.SubModel.Title – 2010-07-09 21:02:53

+0

對於這兩個字段,HTML源代碼的外觀如何?它是否具有名稱屬性中的完整路徑?我假設你正在使用Html.TextBoxFor(),去頭併發布你的HTML源代碼片段。 – a7drew 2010-07-09 21:08:17

+0

標籤有名稱(和相同的ID):「名稱」和「標題」。 我認爲,正確的變體是「名稱」和「SubModel.Title」... – 2010-07-09 21:10:20

0

以下大量的鹽。我仍在努力完成這件事。

這不是解決這個問題的最簡單方法,但是我用於這些事情的調試方法是將操作參數更改爲FormCollection。然後我這樣做:

 StringBuilder sb = new StringBuilder(); 
     foreach (string key in fc.Keys) 
     { 
      sb.Append("Key: " + key + " Value: " + fc[key]); 
     } 

並在調試中檢查sb的值。這可能是一個糟糕的時間浪費,但這是迄今爲止我偶然發現的。

您遇到的問題是模型綁定。標題輸入元素需要被命名爲[ObjectType] _ [PropertyName]。我不知道爲什麼Html.TextBoxFor沒有處理該問題。