2016-04-27 2 views
1

Представьте себе такой сценарий ...Как правильно отдать помощника в помощнике Razor?

@helper TabTest() 
{ 
    using (Html.BeginPortlet()) 
    { 
     <strong>hello</strong> 
    } 
} 

Если я называю его в файле Razor то делает хорошо.

@TabTest() 

Выход: <div class="portlet"><strong>hello</strong></div>

Если я называю это с помощью другого помощника ... например: @Html.RenderBootstrapTabContent(TabTest()) то рендеринг не то же самое.

Выход:

<div class="portlet"></div> 
<strong>hello</strong> 

Это просто грубый пример, и я удалил избыточный код для упрощения. Я предполагаю, что это связано с тем, как конвейер написан, но я не вижу возможности его исправить.

Я читал информацию о viewcontexts и текстовых редакторах, но не знаю, как они будут применяться здесь.

Помощник:

public static MvcHtmlString RenderBootstrapTabContent(this HtmlHelper helper, HelperResult content) 
{ 
    return content.ToHtmlString(); 
} 

Метод BeginPortlet является обычай и очень похож на BeginForm и использует интерфейс IDisposable.

Что я могу сделать, чтобы исправить эту странную ошибку?

ответ

0

На всякий случай мой вопрос не имел для вас смысла. Я нашел кого-то другого, который сделал то, что я пытался объяснить, просто не называя их таким же образом. http://jordanwallwork.co.uk/2012/07/nested-htmlhelpers-with-razor-and-using/

После прочтения всего, что я мог в сети, я до сих пор не нашел ответа. Похоже, что, возможно, никто другой не пытался это сделать (или не знал).

Я, наконец, исправил проблему, переписав метод RenderBootstrapTabContent так же, как BeginPortlet, используя помощника и IDisposable. Так что теперь вместо написания ...

@Html.RenderBootstrapTabContent(TabTest()) 

я теперь использовать

using (Html.BeginBootstrapTabContent()) { @TabTest() } 

Я потратил много времени, в течение последних нескольких дней на это так, я помогаю это может помочь вам.

Если у вас есть идея, пожалуйста, дайте мне знать.