1

内部にビューを表示できる API を構築したいと考えています。

  1. Iframe (通常のビュー)。
  2. または JS (document.write) として。

開発者は iframe を使用する場合もあれば、スクリプトを使用する場合もあります。

したがって、一度 Iframe を呼び出すことができます。

//will render <html><body><div>I am a div</div></body></html>
<iframe src="/page/mysqldata?mod=iframe"></iframe>

そして一度、HTMLをJSとして取得したい

//will render document.write('<div>I am a div</div>');
<script  src="/page/mysqldata?mod=js"></script>

セットアップ方法のチュートリアルを知っていますか?
ところで、私の意見は複雑で、s とcall@Htmlを含む多くの呼び出しがあり ます。RenderSection@Html.Partial

肝心なのは、HTMLにiframeとスクリプトの2つの異なるメソッドを提供したいが、単一のビューを維持したいということです。

ありがとう

4

2 に答える 2

0

あなたができることは、この SO answerRenderPartialViewToString()からの Alex の実装を取得することです。これにより、ビューをコントローラー内の文字列に直接レンダリングできます。

ビューとパーシャルを作成できます。モデルにバインドされたすべてのコンテンツを持つ Partial と、View は<html><body>...etc を追加できます。Razor を使用してすべてのビューを作成し、それらを必要に応じて複雑にします。それらは単なる通常のビューです。

したがって、コントローラーには2つのアクションが必要です。

  1. iframe の html コンテンツの場合: ビューをレンダリングするだけなので、通常の MVC アクションです。
  2. JS コンテンツの場合: を呼び出し RenderPartialViewToString、html を出力する代わりに、次のようにします。

    public JavaScriptResult AsJavascript()
    {
        var theModel = //create the model
        var content = // call to RenderPartialViewToString(this, "PartialViewName", theModel);
        var script = String.Format("document.write('{0}')",
               content.Replace("'", "\'").Replace(Environment.NewLine, ""));
        return this.JavaScript(script);
    }
    

過去にも同様のことをしなければなりませんでしたが、ドキュメントを直接書き込む代わりにjqueryDIVを使用したため、 を作成し、 でコンテンツを設定し、div.html(content)その div をページの本文に追加することで、コードが少しすっきりしました。 . しかし、最終的には同じ結果になるはずです。

于 2012-12-01T16:17:45.883 に答える
0

ここで何かが欠けていないことを願っていますが、コントローラーのアクションは次のようになります。

public ActionResult MySqlData(string mod)
{
    if (string.Compare("js", mod, StringComparison.OrdinalIgnoreCase) == 0)
        return JavaScript("path_to_the_script");
    else if (string.Compare("iframe", mod, StringComparison.OrdinalIgnoreCase) == 0)
        return View("your_view_details_here");
    return HttpNotFound("explain why this action failed");
}
于 2012-12-01T16:18:41.563 に答える