web-dev-qa-db-ja.com

コードMVC Razorでの部分ビューのレンダリング

MVC 3 Razorを使用して、練習用の簡単なCMSを作成しています。アイデアは、いくつかの部分ビューを作成することです。

データベースルックアップを実行したいのですが、ページに3つの部分ビューをレンダリングする必要があることがわかります。

どうすればいいですか? WebFormsでは、LoadControl(ControlURL)を呼び出しますが、同等のものはここにありません。

それはクライアント側のものでしょうか?

編集-ビューの名前を事前に知るのではなく、モデルからビュー名を取得して、そのビューをレンダリングすることを考えていました。したがって、ページにはFooという名前のビューまたはBarという名前のビューがある場合があります。モデルは、実行時に、レンダリングするビューをコントローラーアクションに通知します。

19
Paul

「コントロール」をレンダリングするために使用できる2つの方法があります。

@Html.Partial("ViewName")
@{ Html.RenderPartial("ViewName"); }

他のアクションをレンダリングすることもできます。

@Html.Action("ActionName", "Controller", new { Values = "yourvalues" })
@{ Html.RenderAction("ActionName", "Controller", new { Values = "yourvalues" }); }

それぞれの2番目が@{ }で囲まれていることに注意してください。これは、文字列を返さず、直接ストリームにレンダリングするためです。

50
Buildstarted

また、部分ビューの代わりに@Html.Action()を検討してください

1
Felix
Html.RenderPartial("partialview name", Model.class, new ViewDataDictionary { TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "classname" } });

This code can be used to render the partial view in apge.
HTMLfiledprefix is defined to keep the data available in the model

You can use tis code to load a partial view on a button event using ajax
 function partialview() {
        var url = '@Url.Action("action", "controller")';
        var data = $('#frm').serialize();
(to serialize the data in the model before posting to the action)
        var finaldata = data;
        $.ajax({
            type: "post",
            url: url,
            data: finaldata,
            async: false,
            contentType: "application/json; charset=utf-8",
            error: function (xhr) {
                errorRedirecttoErrorController(xhr.error);
            },
            success: function (data) {
                $("#DIVID").html(data);
(div to which the partial view to be loaded)
            }
        });
    }
0
Jain Chengalan

別の方法

@RenderPage("~/Views/Shared/LeftMenu.cshtml")
0
Fatih