如何在MVC Razor中使用@以及何时需要?

时间:2012-12-28 10:29:35

标签: html asp.net-mvc asp.net-mvc-3 razor hidden-field

我在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会产生错误。

1 个答案:

答案 0 :(得分:2)

@有两个目的。一个触发“代码模式”,一个触发Response.Write

@之前using的实例触发“代码模式”。 @之前的item.Address实例等同于Response.Write(item.Address);。 您仍需要Html.HiddenFor,因为这会返回需要写入响应流的MvcHtmlString输出。

这一行:

Html.HiddenFor(m => m.SelectedStudent);

应该是:

@Html.HiddenFor(m => m.SelectedStudent)

请注意,不再需要;