У меня сейчас проблемы с созданием страницы Master-Detail в проекте ASP.NET MVC 2 на данный момент.Этот проект использует Entity Framework OR / M для отображения таблиц.Я использую пользовательский CategoryModel , который передает другой список объектов.Я упростил Модель для презентаций:
public class CategoryModel {
public Category Category { get; set; }
public IEnumerable<CategoryDescription> CategoryDescriptions { get; set; }
}
CategoryDescription - это коллекция описаний на «языке культуры» длякаждый Категория .
Я передаю 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);
После этого я отправляю данные в мое представление, которое, в свою очередь, попытается отобразить PartialView для каждого CategoryDescription Я имею.Вот где я провал [Показана только часть вида, часть, показывающая объект Категория в порядке]:
<%@ 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 over, заключается в том, чтобы не использовать словарь ViewData [] из моей компании.по многим очевидным причинам.
Спасибо за ваше время, люди, и извините за мой английский, я являюсь носителем французского языка из Канады, если опечатки заранее извините!
РЕДАКТИРОВАТЬ 01/10: Причина, по которой существует один RenderPartial вне цикла, заключается в новом поле ввода для добавления содержимого описания, но в методе обратной передачи edit моего контроллера есть логикапозаботиться об этом. RenderPartial внутри цикла позволяет пользователю редактировать существующие описания этой категории.Ключевым моментом здесь является начало работы цикла, я сделал только леса PartialView для целей тестирования, я даже не могу загрузить пустой "Hello World
", если я передаю данные в
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>