2010-06-23 58 views
0

我根據我的菲爾哈克的文章在這裏工作:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx模型綁定到asp.net mvc中的列表2.找到示例。找不到我要去哪裏錯了

我也看了看幾個職位在這裏在計算器上,我似乎無法得到一個答案對於我的問題,他們可能會提出一個解決方案。我想我需要更多的細分。

我試圖讓模型綁定工作的模型是一個複雜的類型,其中一個屬性是另一種複雜類型的列表視圖。這裏是我的對象:

 public class Data 
     { 
      public Data() 
      { 
       Assessments = new List<AssessmentItem>(); 
      } 

      public String Associate { get; set; } 
      public String Department { get; set; } 
      public String JobTitle { get; set; } 
      public int StartPeriod { get; set; } 
      public int EndPeriod { get; set; } 
      public List<AssessmentItem> Assessments { get; set; } 

     } 

     public class AssessmentItem 
     { 
      public long Index { get; set; } 
      public String Heading { get; set; } 
      public String Comments { get; set; } 
     } 

我試圖使用Haack的文章介紹的EditorFor +控件模板解決方案。這是我的索引視圖(請注意,它是針對單個對象而不是List的強類型)。

這裏是接受職位的控制器方法(雖然,我不認爲這會事初始視圖生成):

[HttpPost] 
    public ActionResult Index(Data data) 
    { 
     return View(data); 
    } 

正如你所看到的,它不會做任何事情在這個階段功能。它只是重新顯示發佈的數據。

以下是Shared/EditorTemplates文件夾中的編輯器模板。

(file name: AssessmentItem.ascx location: 
       Views/Shared/EditorTemplates)   
    <%@ Control Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<Project.Models.AssessmentItem>" %> 
    <%@ Import Namespace="Project.Models" %> 

    Assessment Item Heading: <%= Model.Heading %> 
    <%= Html.HiddenFor(model => Model.Heading) %> 
    <%= Html.HiddenFor(model => Model.Index) %> 
    <%= Html.TextBoxFor(model => model.Comments) %> 
    <%= Html.ValidationMessageFor(model => model.Comments) %> 

我的困惑是,我不知道如何指定每個AssessmentItem的索引。 Haack的文章&代碼包含了幾個HtmlHelper擴展方法,我也將它們包含在我自己的代碼中,但這並沒有解決問題。

這裏是我的觀點的調用代碼(這個用在循環使用Html.RenderPartial,但我無法弄清楚如何綁定回型號的Model.Assessments列表部分):

  <% for (int i = 0; i < Model.Assessments.Count; i++) { %> 
      Entering Loop 
      <% Html.EditorFor(m => m.Assessments[i]); %> 
     <% } %> 

我承認我在這裏有一個相當大的知識差距。在嘗試使用ASP.NET MVC 2之前,我只是用ASP.NET MVC 1打破了界面,但是這些改進似乎值得。

有一件很奇怪的事情是,我似乎無法使用<%:%>語法。任何時候我都會收到幾個編譯時錯誤。不過,我可以使用典型的<%> & <%=%>。我在這裏很困難,所以任何意見將不勝感激。該代碼不會引發任何錯誤。加載頁面就好像沒有被拋出一樣。只是通過Html.EditorFor語句生成的控件不是。 '輸入循環'文本打印兩次,所以我知道我的列表中有AssessmentItem對象。

感謝您的幫助。

+0

<%: %>僅限於ASP.NET 4.0。你可以在3.5開發MVC2網站,但是這個語法不會編譯 – Tommy 2010-06-23 20:30:35

+0

好吧,這很好。謝謝!這裏嚴格使用.net 3.5。 – jason 2010-06-23 20:55:42

回答

1

不需要for循環。所有你需要的是:

<%= Html.EditorFor(m => m.Assessments) %> 

這會自動調用AssessmentItem.ascx編輯模板每個項目Assessments收集模型的英寸所以只要確保控制器將其初始化爲某個值即可。它會自動處理爲編輯器模板中的輸入生成正確名稱,以便模型綁定起作用。

<%: ... %>僅適用於ASP.NET 4.0,與<%= Html.Encode(...) %>等效,但如果您使用的是.NET 3.5,則它將不可用。當與<%= ... %>一起使用時,請注意EditorFor助手末尾缺少;

+0

今天我已經花了8個小時在這個困惑難題。這工作。感謝您結束我的痛苦。 – jason 2010-06-23 21:08:36