6

isを使用Html.RenderPartialすると、レンダリングするビューの名前が取得され、その場所にコンテンツがレンダリングされます。

似たようなものを実装したいと思います。レンダリングしたいビューの名前を他のいくつかの変数と一緒に取得し、コンテナー内のコンテンツをレンダリングしたいと思います。

例えば:

public static class WindowHelper
{
    public static string Window(this HtmlHelper helper, string name, string viewName)
    {
        var sb = new StringBuilder();

        sb.Append("<div id='" + name + "_Window' class='window'>");
        //Add the contents of the partial view to the string builder.
        sb.Append("</div>");

        return sb.ToString();
    }
}

誰もがこれを行う方法を知っていますか?

4

3 に答える 3

8

RenderPartial拡張機能は、Responseオブジェクトに直接レンダリングするようにプログラムされています...これは、それらのソースコードで確認できます。

....).Render(viewContext, this.ViewContext.HttpContext.Response.Output);

これは、アプローチを少し変更すれば、おそらくあなたが望むことを達成できることを意味します。StringBuilderにすべてを追加するのではなく、次のようにすることができます。

using System.Web.Mvc.Html;

public static class WindowHelper
{
    public static void Window(this HtmlHelper helper, string name, string viewName)
    {
        var response = helper.ViewContext.HttpContext.Response;
        response.Write("<div id='" + name + "_Window' class='window'>");

        //Add the contents of the partial view to the string builder.
        helper.RenderPartial(viewName);

        response.Write("</div>");
    }
}

System.Web.Mvc.Htmlを含めると、RenderPartial()メソッドにアクセスできることに注意してください。

于 2009-08-15T23:20:05.217 に答える
8

これはMVC2で修正されています。Html.Partial()を呼び出して、ビューの実際のコンテンツを文字列として取得できるようになります。

于 2009-08-16T07:33:04.147 に答える
0

2番目のビューを作成し、その中にパーシャルを入れて、NameをViewDataとして、またはモデルなどに渡してみませんか。

何かのようなもの:

<div id='<%= ViewData["Name"] + "_Window"%>' class='window'>
   <% Html.RenderPartial(ViewData["Name"]); %>
</div>

お役に立てば幸い、ダン

于 2009-08-15T23:08:07.237 に答える