在Asp.net MVC3中编写下面的代码时,它会自动生成包装html
@using (Html.BeginForm()) {
@Html.ValidationMessageFor(model => model.Text)
}
它以下面的格式生成代码,
<form method="post" action="/Feeds">
<!-- Fields Here -->
</form>
我在@using (Html.BeginForm())
中的问题会在开头和结尾自动添加<form>
标记,如何创建类似我自己的标记。
@using (Html.BeginMYCUSTOMDIV())
{
I am text inside div
}
预期的生成输出
<div class="customDivClass">
I am text inside div
</div>
答案 0 :(得分:9)
有些事情:
public class MyDiv : IDisposable
{
private readonly TextWriter _writer;
public MyDiv(TextWriter writer)
{
_writer = writer;
}
public void Dispose()
{
_writer.WriteLine("</div>");
}
}
public static class MyExtensions
{
public static MyDiv BeginMYCUSTOMDIV(this HtmlHelper htmlHelper)
{
var div = new TagBuilder("div");
div.AddCssClass("customDivClass");
htmlHelper.ViewContext.Writer.WriteLine(div.ToString(TagRenderMode.StartTag));
return new MyDiv(htmlHelper.ViewContext.Writer);
}
}
并在视图中:
@using (Html.BeginMYCUSTOMDIV())
{
<span>Hello</span>
}
产生
<div class="customDivClass">
<span>Hello</span>
</div>
答案 1 :(得分:3)
如果我没弄错的话,Html.BeginForm()
会返回IDisposable
个对象。在using
块中使用时,将调用对象的Dispose
方法,该方法负责将结束标记写入输出。