我现在在 ASP.NET MVC 2 项目中创建主从页面时遇到了麻烦。本项目使用实体框架 OR/M 进行表映射。我正在使用一个自定义CategoryModel,它正在传递另一个对象列表。为了演示目的,我简化了模型:
public class CategoryModel {
public Category Category { get; set; }
public IEnumerable<CategoryDescription> CategoryDescriptions { get; set; }
}
CategoryDescription是每个Category的“基于文化语言的”描述的集合。
我将CategoryModel传递给我的控制器 [再次,出于演示目的,控制器Edit方法已被简化]:
// 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);
之后,我将数据发送到我的视图,然后它会尝试为我拥有的每个CategoryDe scription 呈现PartialView 。这是我失败的地方[仅显示部分视图,显示类别对象的部分很好]:
<%@ 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 标签更改为几种类型,似乎没有解决问题。如果我不使用RenderPartial htmlhelper方法传递任何数据,则页面加载得很好。
我已经在论坛板上尝试了几个建议,但我找不到解决这个问题的答案。我在这里提取PartialView中的数据的唯一限制是不使用我公司的ViewData [] 字典,原因有很多。
感谢您的时间,对不起我的英语,我是来自加拿大的法语母语人士,如果有任何错别字,请提前抱歉!
编辑 01/10 :循环外有一个RenderPartial的原因是用于添加描述内容的新输入框,但我的控制器的回发编辑方法中有逻辑可以解决这个问题。循环内的RenderPartial可以让用户编辑该类别的现有描述。开始使循环工作是这里的关键,我只制作了一个脚手架的PartialView用于测试目的,我什至不能加载一个空的“
你好世界
“如果我将数据传递给PartialView。我将添加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>