0

部分ビューはデータを返しません。PartialView ページ (_ContentBlock.cshtml) のデバッグ ツールで確認すると、モデルが null のようです。

コントローラ

public ActionResult Module()
{
    int RouteDataValue = default(int);
    if (RouteData.Values["id"] != null)
    {
        RouteDataValue = int.Parse(RouteData.Values["id"].ToString());
    }

    using (Models.ContentModel db = new Models.ContentModel())
    {
        var Query = from n in db.PageModule
                       join m in db.Module on n.ModuleId equals m.ModuleId
                       where n.PageId == RouteDataValue
                       select m.PhysicalPath;

        return PartialView(Query.Single()); //returns PartialView such as ~/Modules/Content/_ContentBlock.cshtml
    }
}

public PartialViewResult ContentBlock()
{
    using (Models.ContentModel db = new Models.ContentModel())
    {
        return PartialView("~/Modules/Content/_ContentBlock.cshtml", db.ContentBlock.Where(n => n.PageId == 2).Single());
    }
}

Page.cshtml

@Html.Action("Module")

_ContentBlock.cshtml

@model IEnumerable<Models.ContentBlock>
@foreach (var item in Model)
{
    @Html.DisplayFor(n => item.Content)
}
4

2 に答える 2

2

Html.Partialの代わりにヘルパーを使用したようですHtml.Action。したがって、基本的には、入力するはずのコントローラーアクションとモデルをパーシャルにヒットすることなく、パーシャルをレンダリングするだけでした。

于 2013-06-12T15:16:55.317 に答える
1

あなたのページは、以下を使用しPage.cshtmlて部分ビュー アクションを呼び出しています。Module

@Html.Action("Module")

呼び出されたアクションModuleは実行中です。そのアクションでは、クエリは次のようなビューへのパスになります。

"~/Modules/Content/_ContentBlock.cshtml"

そのアクションは、次を使用してそのクエリの単一の結果を返しています。

return PartialView(Query.Single());

これは、ビューの名前をメソッドに渡してPartialView、アクションからデータを表示するために使用されるビューを返します。また、このリターンにはモデル データは含まれていません。

それがあなたの問題です。部分ビューへのパスを返すときは、データを表示するためにどのビューを使用するかを MVC システムに伝えているだけですModule。実際には、別の部分ビューは呼び出されません。それはそれがどのように機能するかではありません。PartialView(...)呼び出しでデータを渡さなかったため、モデルは null です。

という別のアクションがありContentBlockます。しかし、何も呼び出されていないため、そのアクションは呼び出されていません。

編集:

あなたが抱えているもう1つの問題_ContentBlock.cshtmlは、のモデルを使用することですが、アクションからIEnumerable<ContentBlock>それを渡すだけです。.Single()ContentBlock

于 2013-06-12T15:20:28.383 に答える