現在,我在ASP.NET MVC 2項目中創建主/從頁面時遇到了麻煩。該項目使用實體框架OR/M進行表映射。我正在使用自定義的類別模型正在傳遞另一個對象列表。我已經簡化了型號,以用於演示:ASP.NET MVC 2:創建主詳細視圖時遇到問題
public class CategoryModel {
public Category Category { get; set; }
public IEnumerable<CategoryDescription> CategoryDescriptions { get; set; }
}
CategoryDescription是「文化爲基礎的語言 - 」描述每個類別的集合。
我傳遞的CategoryModel我控制器[此外,控制器編輯方法已被簡化,以用於演示]:
// CategoryModel constructor
CategoryModel categoryModel = new CategoryModel()
{
Category = (from c in bo.Categories where c.CategoryID == categoryId select c) as Category,
CategoryDescriptions = bo.CategoryDescriptions.Where(p => p.CategoryID == categoryId).OrderBy(p => p.Language == "en")
};
return View(categoryModel);
在那之後,我送過數據到我的視圖,這反過來會嘗試渲染一個部分視圖我有。這是,我失敗[只有視圖的一部分顯示,顯示類別對象的部分只是精]:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<InnVue.Globe.Models.CategoryModel>" %>
<%@ Import Namespace="InnVue.Globe.Models" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
<%: ViewContext.RouteData.Values["Action"] %> Category
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2><%: ViewContext.RouteData.Values["Action"] %> Category</h2>
<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>CategoryDescription</legend>
<% foreach (var catdes in Model.CategoryDescriptions) { %>
<% Html.RenderPartial("CategoryDescriptions", catdes); %>
<% } %>
<% Html.RenderPartial("CategoryDescriptions", Model.CategoryDescriptions, new ViewDataDictionary()); %>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
我有現在的問題來自於RenderPartial方法,每次嘗試通過它傳遞數據時會導致應用程序崩潰。
我曾嘗試將Inherits標記更改爲幾種類型,似乎沒有解決問題。如果我沒有通過任何數據使用RenderPartialhtmlhelper方法,頁面加載就好了。
我已經在論壇板上試過了幾個建議,但是我找不到解決這個問題的答案。唯一的限制我這裏有在PartialView上拉的數據是不使用的ViewData []字典由我公司爲許多顯而易見的原因。
感謝您的時間人們,對於我的英語感到抱歉,我是來自加拿大的本地法語發言人,如果有任何錯別字提前抱歉!
編輯01/10:之所以有一個的RenderPartial外循環是用於添加描述內容的新的輸入框,但有邏輯的回傳編輯我的控制器,照顧到方法這個。 RenderPartial循環內部是讓用戶編輯該類別的現有描述。在這裏開始做循環的工作是關鍵,我只是做了一個架式PartialView用於測試目的,我甚至無法加載一個空的「
的Hello World
」如果我通過數據給部分視圖。我將添加在PartialView的代碼,即使我不知道哪個類的應該繼承:<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<InnVue.Globe.Models.CategoryModel>" %>
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<p>Hello World !</p>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
這裏有各種各樣的問題。您不能在另一個表單內部創建表單,並且您無法將部分視圖傳遞給它不用於處理的數據類型。您的部分視圖也與您的主視圖類型相同。你的部分視圖需要是'CategoryDescription'類型,你需要刪除第二個渲染部分並以另一種方式實現。 – 2010-10-01 21:30:04
感謝尼克,它幫了很多! =) – LoganWolfer 2010-10-04 13:51:11