У меня возникли проблемы прямо сейчас с созданием Master-Detail страницы в 2 проекта ASP.NET MVC на данный момент. Этот проект использует Entity Framework OR/M для сопоставления таблиц. Я использую пользовательский CategoryModel который проходит еще один список объектов. Я упростил Модели для презентаций:ASP.NET MVC 2: Возникают проблемы с созданием Master-Detail View
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 для каждого КатегорияDescription У меня есть. Это где я неудачу [Только часть вида показана та часть, показывающая Категория объект просто отлично]:
<%@ 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 [] словарь из моей компании по многим очевидным причинам.
Спасибо за ваше время людей, и извините за мой английский, я родной французский динамик из Канады, если какие-либо опечатки извините заранее!
EDIT 01/10: Причина, почему есть один RenderPartial вне цикла для нового ввода для добавления контента описания, но есть логика в постбэка редактировать метод моего контроллера, чтобы заботиться о это. RenderPartial внутри цикла есть, чтобы позволить пользователю редактировать существующие описания этой категории.Начиная сделать работу цикла является ключом здесь, я только сделал scaffolded 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>
У вас здесь есть всевозможные проблемы. Вы не можете иметь форму внутри другой формы, и вы не можете передать частичный вид, тип данных, который он не предназначен для обработки. Ваш частичный вид также имеет тот же тип, что и ваш основной вид. Ваше частичное представление должно быть типа 'CategoryDescription', и вам нужно удалить второй частичный рендеринг и реализовать его другим способом. –
Спасибо, Ник, это очень помогло! знак равно – LoganWolfer