Поиск альтернативных способов создания блоков HTML-кода в ASP.NET MVC 3 - PullRequest
1 голос
/ 13 ноября 2011

Я не уверен, как сформулировать мой вопрос, поэтому я по сути хочу иметь возможность сделать что-то подобное в ASP.NET MVC 3:

@myJsHtmlCustomCode
{
    <div><h1>Title</h1></div>
}

, где что-нибудь в этом myJsHtmlCustomCodeБлок будет окружен каким-то пользовательским кодом JavaScript / HTML, который я написал.

Я знаю, что мог бы использовать что-то вроде myJsHtmlCustomCode.Begin() и myJsHtmlCustomCode.End() в своем коде, но это не обеспечивает ту же структуру форматирования.

Если кто-то знает подобный способ достижения той же цели и получить автоматическое форматирование контуров / отступов, это было бы здорово.

Просто для справки, я хотел бы @myJsHtmlCustomCodeчтобы окружить код, например, другим <div id="myTestId" onclick="thisClickEvent"></div>, чтобы результирующий код выглядел как ...

<div id="myTestId" onclick="thisClickEvent">    
    <div><h1>Title</h1></div>
</div>

Ответы [ 3 ]

2 голосов
/ 13 ноября 2011

Опция 1

Вы можете обернуть ваш код в объект, который реализует IDisposable, так же, как вы используете @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

Вы можете использовать делегатов с шаблонами Razor :

@{
  Func<dynamic, object> b = @<strong>@item</strong>;
}
<span>This sentence is @b("In Bold").</span>
<div>@b(
   @<span>
       @DateTime.Now 
   </span><span>Example of more complex logic
   </span>
)</div>
1 голос
/ 13 ноября 2011

Хотя я должен признать, что не до конца понимаю ваш вопрос, всякий раз, когда мне нужно выполнить программируемые пользовательские манипуляции с HTML в .Net MVC 3, я использую Html Agility Pack .

0 голосов
/ 13 ноября 2011

Можете ли вы достичь желаемого результата с помощью @section?

например: в одном файле 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><h1>Title</h1></div>    
}

Вы можете использовать частичное представление для бита js, например:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...