現在、ASP.NET MVC 2 プロジェクトでマスター/詳細ページを作成する際に問題が発生しています。このプロジェクトでは、テーブル マッピングに Entity Framework 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をレンダリングしようとします。これは私が失敗する場所です[ビューの一部のみが表示され、Categoryオブジェクトを表示する部分は問題ありません] :
<%@ 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 [] 辞書を使用しないことです。
お時間をいただきありがとうございます。私の英語で申し訳ありません。私はカナダ出身のフランス語を母国語としています。
EDIT 01/10 : ループの外側にRenderPartialが 1 つある理由は、説明コンテンツを追加するための新しい入力ボックスのためですが、コントローラーのポストバック編集メソッドにはこれを処理するロジックがあります。ループ内の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>