none
WebMatrix Razorで変数に代入されたhtmlタグについて RRS feed

  • 質問

  • お世話になっております。

    現在、ASP.Net razorを使って色々検証をいたしております。

    変数に代入したhtmlタグを含む文字列を、htmlencodeをせずに出力したいのですが、たとえば、以下のようなコードを動作させた場合、自動的にhtmlencodeされた状態で出力されてしまいます。

    //ここから----------------

    @{

    var strHtml = "<p>Hello World</p>"

    }

    <div>@strHtml</div><!-- htmlencode済の値が返却される -->

    //-----------------ここまで

    Response.Write(変数) を使用すれば、htmlencodeされていない期待通りの値が返却されることはわかりましたが、Response.Writeでは、出力順序がhtmlで記述した部分よりも先になってしまいますため、うまく活用することが難しい状態です。

    何かよい解決方法ございますでしょうか?

    2010年9月7日 7:29

回答

  • http://takepara.blogspot.com/2010/08/blog-post.html

    namespace System.Web.Mvc
    {
     public static class HtmlHelperExtensions
     {
     public static IHtmlString Literal(this HtmlHelper htmlHelper, string html)
     {
      return MvcHtmlString.Create(html);
     }
    
     public static IHtmlString AsHtml(this string html)
     {
      return MvcHtmlString.Create(html);
     }
     }
    }
    
    ↑これを用意。
     @Html.Literal(Model.contents)
    
    あとは↑こうか↓こう。
     @Model.contents.AsHtml()
    
    • 回答の候補に設定 山本春海 2010年9月30日 2:43
    • 回答としてマーク 山本春海 2010年10月4日 4:57
    2010年9月23日 11:24

すべての返信

  • ASP.Net razorを使っていないのでアレですが、asp.netのSystem.Web.UI.HtmlControls名前空間のInnerHtmlやInnerTextは使えませんか? あとはjavascriptを使って、Ajax的に実現してみるとか。
    2010年9月7日 15:32
  • 確認してませんけど、<text>ブロックで囲んでみたらどうでしょう?

    http://www.atmarkit.co.jp/fdotnet/scottgublog/20100714razor/razor.html

     


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2010年9月8日 3:15
  • CatTail様>

    ご返信ありがとうございます。htmlEncodeされるタイミングが@変数を実際にブラウザに出力する時のようですため、InnerHtmlではうまくいきませんでした。Ajax的にいく方法ならうまくいくかもしれませんね。頑張ってみます!

    小野@どっとねっとふぁん様>

    ご返信ありがとうございます。<text>ブロックで囲んでも、タグ自体はhtmlEncodeする仕様のようです。。

     

    2010年9月17日 9:02
  • http://takepara.blogspot.com/2010/08/blog-post.html

    namespace System.Web.Mvc
    {
     public static class HtmlHelperExtensions
     {
     public static IHtmlString Literal(this HtmlHelper htmlHelper, string html)
     {
      return MvcHtmlString.Create(html);
     }
    
     public static IHtmlString AsHtml(this string html)
     {
      return MvcHtmlString.Create(html);
     }
     }
    }
    
    ↑これを用意。
     @Html.Literal(Model.contents)
    
    あとは↑こうか↓こう。
     @Model.contents.AsHtml()
    
    • 回答の候補に設定 山本春海 2010年9月30日 2:43
    • 回答としてマーク 山本春海 2010年10月4日 4:57
    2010年9月23日 11:24