ASP.NET MVC 3でHTMLコードのブロックを作成する別の方法を探している

私はどのように私の質問をフレーズするか分からないので、私は本質的にASP.NET MVC 3でこれを行うことができるようにしたい:

@myJsHtmlCustomCode
{
    <div>

Title

</div>
}

その myJsHtmlCustomCode ブロック内のものは、私が書いたカスタムJavaScript/HTMLコードで囲まれています。

自分のコードに myJsHtmlCustomCode.Begin()myJsHtmlCustomCode.End()のようなものを使用することができますが、これは同じ書式設定構造を提供しません。

誰もが同じ目的を達成するために同様の方法を知っていて、自動的なアウトライン/インデント書式を取得すれば、それは素晴らしいことでしょう。

参考のために、私は @myJsHtmlCustomCode がコードを例えば </div> 結果のコードが次のように表示されます。

<div id="myTestId" onclick="thisClickEvent">    
    <div>

Title

</div>
</div>
1
必要な出力のサンプルを含めると役立ちます。私たちはあなたの心を読むことができません。
追加された 著者 Erik Funkenbusch,

3 答え

オプション1

You can wrap your code in an object that implements IDisposable, just like you use @using (Html.BeginForm())

あなたのコードは次のようになります:

public class MyJsHtmlCustomCode : IDisposable {
    private ViewContext _ctx; 

    public MyJsHtmlCustomCode (HtmlHelper html, /* other params */) {
       _ctx = html.ViewContext;
       /* Write begin tags */
        _ctx.Writer.Write("html => opening tags");        }

    public Dispose() {
        _ctx.Writer.Write("html => closing tags");
    }
}

と拡張子:

public static MyJsHtmlCustomCode BeginMyJsHtmlCustomCode(this HtmlHelper html /* other params */) {
    var result = new MyJsHtmlCustomCode(html);
    return result;
}

使用法:

@using(Html.BeginMyMyJsHtmlCustomCode()) {
     <div>This is surrounded by your code </div>
}

オプション2

You can use Razor Templated Delegates:

@{
  Func b = @@item;
}
This sentence is @b("In Bold").
<div>@b(
   @
       @DateTime.Now 
   Example of more complex logic
   
)</div>
2
追加された
@ブライアン、おめでとう。
追加された 著者 GvS,
完璧な、ちょうど私が探していたものは、詳細を追加するつもりだったが、週末に赤ちゃんを持つことに終わった。
追加された 著者 Brian Deragon,

私はあなたの質問を完全には理解していませんが、.NET MVC 3でプログラム的なカスタムHTML操作を行う必要があるときはいつでも、 Html Agility Pack をご覧ください。

1
追加された

@sectionを使用して希望の結果を達成できますか?

例:1つのcshtmlで、可能であれば_Layout:

<script type="text/javascript">
// whatever you want
// more whatever you want
@RenderSection("jsCode", false)
// even more whatever you want
</script>

あなたの実際のビューでは、cshtml:

@section jsCode{
   <div>

Title

</div>    
}

おそらくjsビットの部分ビューを使用することができます。

0
追加された