有人可以向我解释为什么我们需要使用
@using (Html.BeginForm("CheckUser", "Home", FormMethod.Post))
而不是:
@Html.BeginForm("CheckUser", "Home", FormMethod.Post)
@using在这里的主要目的是什么,据我所知,我只使用'使用'关键字,以确保对象在超出范围时立即处理。我有点困惑。
我问这个问题是因为@ Html.BeginForm会输出一个文本:" System.Web.Mvc.Html.MvcForm {"在呈现表单的内容之前。 并使用'使用'关键字此文字未呈现。
编辑:这是我的代码,用于呈现" System.Web.Mvc.Html.MvcForm ..."
@Html.BeginForm("CheckUser", "Home", FormMethod.Post)
<label for="username">Username :</label>
<input type="text" name="username" id="username" placeholder="username"/>
<label for="password">Password :</label>
<input type="password" name="password" id="password" placeholder="password"/>
<input type="submit" value="Submit" />
@{Html.EndForm();}
答案 0 :(得分:3)
BeginForm
对IDisposible
模式使用相当有趣(误用)!
从头开始,BeginForm
会返回MvcForm
的实例。 MvcForm
实施IDisposible
及其Dispose
方法......
[...]在Using语句的末尾呈现结束标记。
如果没有这种实现,您需要按照
的方式做一些事情@{ Html.BeginForm("CheckUser", "Home", FormMethod.Post); }
<!-- form content here -->
@{ Html.EndForm(); }
我猜,他们做出的决定很笨重而且容易忘记。
答案 1 :(得分:3)
使用var temp = {};
var result = [];
for (var i=0; i<serie_chart.length; i++) {
var chart = serie_chart[i]
var name = chart.name
if(!temp[name]) {
temp[name]=[];
result.push({'name': name, 'data': temp[name]})
}
temp[name].push(chart.data);
}
它会自动在您的页面中添加@using (Html.BeginForm("CheckUser", "Home", FormMethod.Post))
。您不需要关心关闭表单标签,如果有人忘记关闭表单,它可以防止意外问题。
</form>
如果您想使用Html.EndForm(),请使用它,如下所示
@*<form>*@
@using (Html.BeginForm("CheckUser", "Home", FormMethod.Post))
{
}@* </form> gets added automaticaly*@
原因:@{Html.BeginForm("CheckUser", "Home", FormMethod.Post);}
//other form elements
@{Html.EndForm();}
不返回任何内容(返回类型Html.EndForm()
),它会在流上写入。如果您不使用void
,则{}
符号会从以下语句中返回某些内容,因此会使用@
,结果为object.ToString()
答案 2 :(得分:3)
这是强制渲染表单的close标签的技巧。
这个技巧基于System.Web.Mvc.Html.MvcForm
接口,IDisposable
理解并用于在块结束后调用using
方法。
从Dispose
返回的类型的Dispose
实现实际上并未处置任何内容。它只是将结束标记写入输出流。