我創建了一個基於this answer的SO問題c# - How can I create a Html Helper like Html.BeginForm - Stack Overflow的擴展方法,它工作正常。使用部分視圖的ASP.NET MVC3 HtmlHelper擴展方法(如BeginForm)?
我可以將擴展方法中的嵌入式HTML移動到局部視圖中,並在該方法中使用該局部視圖,同時保留它的當前行爲?特別是,我希望能夠'包裝'任意HTML的塊。
我不問任何迫切的需求,而只是出於希望保持一致的HTML,例如作爲觀點和部分觀點。我想如果它在視圖或局部視圖中,發現HTML的任何問題都會容易得多。
這裏的HtmlHelper
擴展方法:
public static IDisposable HelpTextMessage(this HtmlHelper helper, bool isHidden, string heading)
{
TextWriter writer = helper.ViewContext.Writer;
writer.WriteLine(
String.Format(
"<div class=\"help-text {0}\">",
isHidden ? "help-text-hidden" : ""));
writer.WriteLine(
String.Format(
"<div class=\"help-text-heading\">{0}</div>",
heading));
writer.Write("<div class=\"help-text-body\">");
return new HelpTextMessageContainer(writer);
}
這裏的HelpTextMessageContainer
類:
private class HelpTextMessageContainer : IDisposable
{
private readonly TextWriter _writer;
public HelpTextMessageContainer(TextWriter writer)
{
_writer = writer;
}
public void Dispose()
{
_writer.Write("</div></div>");
}
}
在視圖中,我可以使用擴展方法是這樣的:
@using(Html.HelpTextMessage(Model.HelpText.IsHelpTextHidden(Model.SomeHelpMessage), "Something"))
{
@:To do something, first do something-more-specific, then do another-something-more-specific.
}
或者我也可以這樣使用它:
@using(Html.HelpTextMessage(Model.HelpText.IsHelpTextHidden(Model.SomeHelpMessage), "Something"))
{
<p>To do something, first do something-more-specific, then do another-something-more-specific.</p>
<p>Also, keep in mind that you might need to do something-else-entirely if blah-blah-blah.</p>
}
剛剛救了我一天...... :) –