Zoeken naar alternatieve manieren om blokken HTML-code te maken in ASP.NET MVC 3

Ik weet niet zeker hoe ik mijn vraag moet formuleren, dus ik wil in wezen zoiets als dit kunnen doen, in ASP.NET MVC 3:

@myJsHtmlCustomCode
{
    <div>

Title

</div>
}

waar alles in dat myJsHtmlCustomCode -blok zou worden omgeven door een aangepaste JavaScript/HTML-code die ik schreef.

Ik weet dat ik iets als myJsHtmlCustomCode.Begin() en myJsHtmlCustomCode.End() in mijn code kan gebruiken, maar dat biedt niet dezelfde opmaakstructuur.

Als iemand een vergelijkbare manier kent om hetzelfde doel te bereiken en de automatische indeling/inspringing opmaakt, zou dat geweldig zijn.

Alleen ter referentie wilde ik dat de code @myJsHtmlCustomCode de code omringt met bijvoorbeeld een andere <div id = "myTestId" onclick = "thisClickEvent"> </div> om de resulterende code eruit te laten zien ...

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

Title

</div>
</div>
1
Het kan helpen om een ​​voorbeeld van het gewenste type uitvoer op te nemen. We kunnen je gedachten niet lezen.
toegevoegd de auteur Erik Funkenbusch, de bron

3 antwoord

Optie 1

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

Uw code kan zo zijn:

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");
    }
}

en de extensie:

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

Gebruik:

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

Optie 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
toegevoegd
@Brian, gefeliciteerd.
toegevoegd de auteur GvS, de bron
Perfect, precies wat ik zocht, zou meer details toevoegen, maar kreeg uiteindelijk een baby in het weekend.
toegevoegd de auteur Brian Deragon, de bron

Hoewel ik moet toegeven dat ik je vraag niet volledig begrijp, als ik in HTML-manipulatie programmatisch aangepaste .Net MVC 3 moet gebruiken, gebruik ik de Html Agility Pack .

1
toegevoegd

Zou je het gewenste resultaat kunnen bereiken met @section?

bijvoorbeeld: in één cshtml, mogelijk de _Layout:

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

Dan in uw actuele weergave cshtml:

@section jsCode{
   <div>

Title

</div>    
}

U kunt mogelijk een gedeeltelijke weergave gebruiken voor de js-bit, bijvoorbeeld

0
toegevoegd