为什么我们需要将 @using 与 Html.BeginForm 一起使用

Meh*_*egi 5 c# asp.net-mvc razor

有人可以向我解释为什么我们需要使用

@using (Html.BeginForm("CheckUser", "Home", FormMethod.Post))
Run Code Online (Sandbox Code Playgroud)

代替 :

@Html.BeginForm("CheckUser", "Home", FormMethod.Post)
Run Code Online (Sandbox Code Playgroud)

@using 在这里的主要目的是什么,据我所知,我只使用 'using' 关键字来确保对象在超出范围时立即被处理。我有点困惑。

我问这个问题是因为 @Html.BeginForm 在渲染表单内容之前输出一个文本:“System.Web.Mvc.Html.MvcForm {”。通过使用“using”关键字,该文本不会被渲染。

编辑:这是我的代码,呈现“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();}
Run Code Online (Sandbox Code Playgroud)

K D*_*K D 4

通过使用@using (Html.BeginForm("CheckUser", "Home", FormMethod.Post))

它会自动添加</form>到您的页面中。您无需关心关闭表单标签,并且可以防止有人忘记关闭表单时出现意外问题。

@*<form>*@
    @using (Html.BeginForm("CheckUser", "Home", FormMethod.Post)) 
    {

    }@* </form> gets added automaticaly*@ 
Run Code Online (Sandbox Code Playgroud)

如果你想使用 Html.EndForm(),请像下面这样使用

@{Html.BeginForm("CheckUser", "Home", FormMethod.Post);}
//other form elements
@{Html.EndForm();}
Run Code Online (Sandbox Code Playgroud)

原因:Html.EndForm()不返回任何内容(返回类型void),而是写在流上。如果您不使用{},@符号将期望从以下语句中返回某些内容,因此它将使用object.ToString()哪个结果System.Web.Mvc.Html.MvcForm