1. ホーム
  2. c#

[解決済み] Razor ビューエンジン - パーシャルビューを追加する方法

2023-05-30 15:13:40

質問

新しい razor ビューエンジンを使ってパーシャルをレンダリングする最良の方法は何か、もし可能であるなら、それは何なのか、と考えていました。私は、これが、(i) の時点で完全に完成していなかったものであることを理解しています。

今、私はユーザー コントロールをレンダリングするために RenderPage を使用しています。

@RenderPage("~/Views/Shared/LocaleUserControl.cshtml",ViewData.Model)

RenderPageを呼び出したページでは、3つのセクションが定義されたレイアウト(マスター)ページを使用しています。TitleContent、HeadContent、および Maincontent の 3 つのセクションが定義されているレイアウト (マスター) ページを使用しています。このページからロケール コントロールをレンダリングしようとすると、これらのセクションも必要であるように見えますが、呼び出し側のページでのみ必要であるべきで、存在します。これらのセクションを部分ビューに含めるかどうかに関係なく、次のメッセージが表示されます (明らかに、これらのセクションを含める必要はありませんが、興味深いデバッグ ポイントのように思われました)。

次のセクションが定義されています。 定義されていますが、レンダリングは レイアウトページにレンダリングされていません。 '~/Views/Shared/LocaleUserControl.cshtml': TitleContent; HeadContent; MainContent

私の部分表示は以下の通りです(以下より引用 リンク ):

@inherits System.Web.Mvc.WebViewPage<LocaleBaseModel>
@using System.Web.UI;

<p>
     @Html.LabelFor(model => Model.CountryName)
    <br />
    @Html.DropDownListFor(model => Model.CountryName,null, string.Empty, new { @class = "text", accesskey="u"})
</p>
<p>
     @Html.LabelFor(model => Model.StateProvince)
    <br />
     @Html.DropDownListFor(model => Model.StateProvince, null, string.Empty, new { @class = "text", accesskey="t" })
</p>


<script type="text/javascript">
    $(function () {
        var countries = $("#CountryName");
        var statesprovinces = $("#StateProvince");
        countries.change(function () {
            statesprovinces.find('option').remove();
            var url = '@Url.Action("GetStatesProvinces", "Base")';
            $.getJSON(url, { countryId: countries.val() }, function (data) {
                $(data).each(function () {
                    $("<option value=" + this.ID + ">" + this.Name + "</option>").appendTo(statesprovinces);
                });
            });
        });
    });
</script>

どのように解決するのですか?

あなたのパーシャルはエディタテンプレートのように見えるので、そのように含めることができます (もちろん、あなたのパーシャルは ~/views/controllername/EditorTemplates サブフォルダに置かれていると仮定します)。

@Html.EditorFor(model => model.SomePropertyOfTypeLocaleBaseModel)

また、そうでない場合は単純に

@Html.Partial("nameOfPartial", Model)