我根據我的菲爾哈克的文章在這裏工作: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對象。
感謝您的幫助。
<%: %>僅限於ASP.NET 4.0。你可以在3.5開發MVC2網站,但是這個語法不會編譯 – Tommy 2010-06-23 20:30:35
好吧,這很好。謝謝!這裏嚴格使用.net 3.5。 – jason 2010-06-23 20:55:42