4

テンプレートの HTML 文字列があり、さまざまな未知のポイントに {{Url}} プレースホルダーがあり、アプリケーションの特定のコントローラー/アクションに関連しています。私がする必要があるのは、ビューで最終的な html をレンダリングする前に、html をこれらのプレースホルダーにレンダリングすることです。

Html.RenderAction("Action","Controller")ビューでは、必要な文字列を返す だけで呼び出すことができます。ただし、たとえば、コントローラーコードでこのメソッドを呼び出す必要があります(これは簡略化されています)。

「ダッシュボード」コントローラーで:

var templateHtml = GetTemplateHtml();

//The following line doesn't compile
var html = Html.RenderAction("Index","PowerAnalysisDashpart");

ViewBag.Html = templateHtml.Replace("{{PowerAnalysisDashpart}}",html)

次に、「ダッシュボード ビュー」で:

<div id="content">
    @Html.Raw(ViewBag.Html)
</div>

コントローラでレンダリングされた HTML 文字列を取得するために「RenderAction」を呼び出すにはどうすればよいですか?

編集: 私が達成しようとしていることについて混乱があるようです。基本的に、管理者が HTML テンプレートを作成できるようにする必要があります。このテンプレートには、アプリケーションのさまざまなページのフレームが効果的に含まれます。iframe も機能しますが、すべての HTML をサーバー上に構築することをお勧めします。

4

4 に答える 4

8

HtmlHelper.Actionではなく欲しいと思いますRenderActionRenderActionコンテンツを応答ストリームに書き込みます。Action文字列として返します。

http://msdn.microsoft.com/en-us/library/ee721266(v=vs.108).aspx

アクションは名前空間に存在するChildActionExtensionsクラスで定義されるSystem.Web.Mvc.Htmlため、コントローラー コードはその名前空間を使用する必要があります。

Actionは Html を文字列として返しますが、 は Html 出力を親ドキュメントとインラインで現在の応答ストリームに直接書き込むRenderActionため、void を返します。RenderActionこれが、コントローラーではなくビューからは機能する理由です。

MVC 4 で HtmlHelper インスタンスを作成するには、次を使用できます。

HtmlHelper helper = new HtmlHelper(new ViewContext(ControllerContext, new WebFormView(ControllerContext, "Index"), new ViewDataDictionary(), new TempDataDictionary(), new StringWriter()), new ViewPage());

関連する SO の質問について他のコメンターが述べているように、これは実際には意図したものではありません (これは、HtmlHelper をインスタンス化する必要があるハックな方法から明らかです)。あなたの代替ソリューションよりもはるかに優れているかどうかはわかりません。可能であれば、よりMVCのようにリファクタリングすることをお勧めしますが、それがオプションではない場合もあります。

于 2013-09-03T11:25:28.703 に答える
-2

メインビューで部分ビューをレンダリングできる部分ビューが必要だと思います

 @Html.Partial("myPartailView")

詳細はリンク先をチェック

http://www.codeproject.com/Tips/617361/Partial-View-in-ASP-NET-MVC-4

于 2013-09-03T10:05:32.177 に答える
-2

ビューを文字列としてレンダリングするには、次のアプローチに従うことができます。

var html = RenderRazorViewToString("viewName",model); //pass model if you are binding model in view


// It will return your view as string
[NonAction]
public string RenderRazorViewToString(string viewName, object model)
{
    ViewData.Model = model;
    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);
        viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
        return sw.GetStringBuilder().ToString();
    }
}
于 2013-09-03T10:32:00.660 に答える