サーチ…


前書き

部分ビューは、別のビュー内でレンダリングされるビューです。部分的なビューは再利用することができ、コードの重複を防ぐことができます。それらは、Html.PartialまたはHtml.RenderPartialによってレンダリングすることができます。

構文

  • @ Html.Partial( "ViewName")

    @ Html.Partial( "ViewName"、ViewModel)

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

    パーシャルビューが共有フォルダ以外の別のフォルダにある場合は、以下のようにビューのフルパスを指定する必要があります。

    -Html.RenderPartial( "〜/ Areas / Admin / Views / Shared / partial / _subcat.cshtml")

モデルによる部分ビュー

モデルを部分ビューに追加することもできます。

@model Solution.Project.Namespace.MyModelClass
<p>@Model.Property</p>

ビューでは次のものを使用できます:

<div>
    @Html.Partial("PartialViewExample", new MyModelClass(){Property="my property value"})  
</div>
<div>
    @{ Html.RenderPartial("PartialViewExample", new MyModelClass(){Property="my property value"}); }  
</div>

文字列への部分的なビュー - 電子メールコンテンツなど

関数を呼び出す

string InvoiceHtml = myFunction.RenderPartialViewToString("PartialInvoiceCustomer", ToInvoice); // ToInvoice is a model, you can pass parameters if needed

HTMLを生成する関数

public static string RenderPartialViewToString(string viewName, object model)
{
    using (var sw = new StringWriter())
    {
        BuyOnlineController controller = new BuyOnlineController(); // instance of the required controller (you can pass this as a argument if needed)

        // Create an MVC Controller Context
        var wrapper = new HttpContextWrapper(System.Web.HttpContext.Current);

        RouteData routeData = new RouteData();

        routeData.Values.Add("controller", controller.GetType().Name.ToLower().Replace("controller", ""));

        controller.ControllerContext = new ControllerContext(wrapper, routeData, controller);

        controller.ViewData.Model = model;

        var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);

        var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
        viewResult.View.Render(viewContext, sw);

        return sw.ToString();
    }
}

パーシャルビュー - PartialInvoiceCustomer

@model eDurar.Models.BuyOnlineCartMaster
 <h2>hello customer - @Model.CartID </h2>

Html.Partial対Html.RenderPartial

Html.Partialは voidを返すHtml.RenderPartial一方、文字列を返します。

Html.RenderPartial

このメソッドはvoidを返し、結果はHTTPレスポンスストリームに直接書き込まれます。つまり、現在のWebページ/テンプレートで使用されているのと同じTextWriterオブジェクトを使用します。このため、このメソッドはパーシャルメソッドより高速です。このメソッドは、パーシャルビューの表示データが対応するビューモデルに既に存在する場合に便利です。

例:記事のコメントを表示するブログでは、コメント付きの記事情報が既にビューモデルに設定されているため、RenderPartialメソッドを使用したいと考えています。

@{Html.RenderPartial("_Comments");}

Html.Partial

このメソッドは、HTMLでエンコードされた文字列を返します。これは変数に格納することができます。 Partialメソッドは、RenderPartialメソッドと同様に、パーシャルビューの表示データが対応するビューモデルに既に存在する場合にも便利です。

例:記事のコメントを表示するブログでは、コメントを含む記事情報が既にビューモデルに設定されているため、部分的な方法を使用できます。

@Html.Partial("_Comments")


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow