我在MVC 3上相当新,但我遇到了一个相当奇怪的问题。
我正在使用Razor语法,根据VS,如果语句前面有另一个@
语句,或者一旦在代码中,则前缀{我不需要在@
前加上语句。 <1}}不再需要。
所以这是我的视图中的代码:
@
请注意, @using (Html.BeginForm("StudentSelect", "Home", FormMethod.Post, new { id = "sSelect" })) {
Html.HiddenFor(m => m.SelectedStudent);
foreach (Classes.CStudent item in Model.Students)
{
<div class="studentSelect">
<div class="studentname">@item.StudentName</div>
<div>@item.Address</div>
</div>
}
}
和Html.HiddenFor
行没有foreach
前缀。
生成的HTML应生成@
后跟<form>
字段。
但是,在检查生成的页面上的HTML时,隐藏的输入字段将丢失。
<input type="hidden">
我做错了吗?为什么隐藏的输入没有呈现? 任何线索都会有所帮助。感谢
顺便说一句,这段代码编译正确。但是,如果我在<form action="/Home/StudentSelect" id="sSelect" method="post">
<div class="studentSelect">
<div class="studentname">Name1</div>
<div>AAA</div>
</div>
<div class="studentSelect">
<div class="studentname">Name2</div>
<div>Address1</div>
</div>
</form>
前面加@
前缀,则我的代码无法编译,Visual Studio会产生错误。
答案 0 :(得分:2)
@
有两个目的。一个触发“代码模式”,一个触发Response.Write
。
@
之前using
的实例触发“代码模式”。
@
之前的item.Address
实例等同于Response.Write(item.Address);
。
您仍需要Html.HiddenFor
,因为这会返回需要写入响应流的MvcHtmlString
输出。
这一行:
Html.HiddenFor(m => m.SelectedStudent);
应该是:
@Html.HiddenFor(m => m.SelectedStudent)
请注意,不再需要;
。