我目前有一個場景,我重新使用HTML代碼塊。我基本上有一個div容器,我在整個站點重新使用該容器及其變體。需要一個替代我的IDisposable文012
的包裝容器由以下的html:
<div class="c_wrapper">
<div class="c_content">
CONTENT GOES HERE
</div>
</div>
* 請注意,有很多更重要的集裝箱比我指定,這是一個基本的框架。
而不是重新鍵入上多次我容器代碼每一頁上,我利用了IDisposable,使其稍微容易一些:
public static class Container
{
public static ContainerHelper BeginContainer(this HtmlHelper content, int containerSize)
{
return new ContainerHelper(content, containerSize);
}
}
public class ContainerHelper : IDisposable
{
private readonly HtmlHelper _content;
public ContainerHelper(HtmlHelper content, int containerSize)
{
_content = content;
var sb = new StringBuilder();
sb.Append("<div class=\"container_" + containerSize + "\">");
_content.ViewContext.Writer.WriteLine(sb.ToString());
}
public void Dispose()
{
var sb = new StringBuilder();
sb.Append("</div>");
_content.ViewContext.Writer.WriteLine(sb.ToString());
}
}
這意味着我現在可以簡單地使用以下每當我想使用的容器:
@using (Html.BeginContainer(24))
{
<span>hello world... and other content here</span>
}
我想,雖然藉此遠一點,我意識到,IDisposable的不是理想的解決方案。
我希望能夠做到以下幾點:
@Html.Container(24)
{
<span>hello world... and other content here</span>
}
我如何能做到這一點有什麼建議?如果這是不可實現的,關於如何在不使用IDisposable的情況下完成我的第一個示例的建議。
我正在使用MVC 3/4和C#。
Thanx
也許我誤解了......但爲什麼你不能只調用一個函數返回一個'IHtmlString'?你的例子是不可能的..但也許我的建議適合?順便說一句,這不是一個黑客。我一直在某些地方使用它。事實上,我已經看到很多擴展HtmlHelpers的例子,完全相同的方式。 – 2013-05-06 11:30:02
我寫出html,所以我放在我使用的括號中的東西獲取與div包裹。你能舉一個我如何完成與IHtmlString相同的例子嗎? – 2013-05-06 11:30:57
我的觀點是,你無法像使用''一樣對待它。沒有上下文中的大括號說「好吧,我完成了,處置我和調用這個代碼」就像是一個「使用」塊。 「使用」就是這樣工作的,因爲它變成了「試圖......最後」的「幕後」。 – 2013-05-06 11:32:39