11

asp.net MVC レイアウト ページの共有コンテンツ (ナビゲーション) の設定に取り組んでいます。

モデルからナビゲーション データを取得するためのコードを含む部分ビュー "_LayoutPartial.cshtml" を次に示します。

@model MyApp.Models.ViewModel.LayoutViewModel
<p>

    @foreach (var item in Model.navHeader)
    {
        //Test dump of navigation data
        @Html.Encode(item.Name); 
        @Html.Encode(item.URL); 

    }
</p>

私のコントローラー「LayoutController.cs」のコードは次のようになります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MyApp.Models.ViewModel;

namespace MyApp.Controllers
{
    public class LayoutController : Controller
    {

        //
        // GET: /Layout/

        LayoutViewModel layout = new LayoutViewModel();

        public ActionResult Index()
        {
            return View(layout);
        }

    }
}

「_Layout.cshtml」ページのコードは次のとおりです。Html.RenderAction(Action,Controller) メソッドを使用して、ここで部分ビューを呼び出そうとしています。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <p>
        @{Html.RenderAction("Index","Layout");}
    </p>

    @RenderBody()
</body>
</html>

レイアウト ページで @{Html.RenderAction("Index","Layout");} 行を実行すると、エラー メッセージ「ハンドラ 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper' の子要求の実行中にエラーが発生しました。」がスローされます。

友達がいないのは何ですか?レイアウト ページで部分ビューを呼び出すにはどうすればよいですか?

よろしくお願いします!

4

4 に答える 4

18

それ以外の:

public ActionResult Index()
{
    return View(layout);
}

行う:

public ActionResult Index()
{
    return PartialView(layout);
}

子アクションから通常のビューを返すときにそうしないと、この通常のビューはレイアウトを含めようとし、次に子アクションをレンダリングしようとします。これにより、ビューが返され、レイアウトが含まれます。 、次に子アクションをレンダリングしようとします...そして、このまったく同じサイトによって移植されたような名前になります。

また、パーシャルでは、二重エンコードを行う必要はありません。@ Razor 関数は既に HTML エンコードを行っています。

@model MyApp.Models.ViewModel.LayoutViewModel
<p>

    @foreach (var item in Model.navHeader)
    {
        @item.Name 
        @item.URL
    }
</p>
于 2012-07-12T19:42:30.280 に答える
6

まず、子ビューがSharedディレクトリ内にあることを確認します

@Html.Partial("_LayoutPartial")

また

 @{Html.RenderAction("actionname", "controller name");}

を使用しない@Html.Encode()でください。Razor は既に使用しています。使うだけ

@item.Name 
@item.URL
于 2012-07-12T19:43:33.190 に答える
2

レイアウトページでこのエラーを解決しました

System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper

重要 !最初に共有フォルダー内に部分ビューを作成します

コントローラーで、

public PartialViewResult Userdetails()
{
   ....
   return PartialView("PartialViewName", obj);  
}

レイアウトページで、

@{Html.RenderAction("action","controller");}
于 2016-05-13T11:34:21.690 に答える
0

これは古い質問であることは知っていますが、ここに入れると思いました。またはのいずれかを使用できHtml.ActionますHtml.RenderAction。どちらも技術的には同じことを行いますが、返されるコンテンツの量によっては、最高の効率を得るために実際にどちらを使用する必要があるかに影響を与える可能性があります.

どちらのメソッドでも、ビューからアクション メソッドを呼び出して、アクションの結果をビュー内に出力できます。この 2 つの違いはHtml.RenderAction、結果を Response に直接レンダリングする (アクションが大量の HTML を返す場合はより効率的です) のに対してHtml.Action、結果を含む文字列を返すことです。

ソース

于 2016-11-22T17:59:23.947 に答える