1

我是 MVC 3 的新手,但遇到了一个相当奇怪的问题。我使用的是 Razor 语法,根据 VS,@如果语句前面紧跟另一个@语句,或者一旦在代码中,@则不再需要前缀。

所以这是我视图中的代码:

    @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.HiddenForandforeach行没有@前缀。生成的 HTML 应该产生一个<form>后跟一个<input type="hidden">字段。但是,在检查生成页面上的 HTML 时,隐藏的输入字段丢失了。

<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>

难道我做错了什么?为什么不渲染隐藏的输入?任何线索都会有所帮助。谢谢

顺便说一句,这段代码编译正确。但是,如果我@在代码前面添加前缀,Html.HiddenFor则无法编译并且 Visual Studio 会产生错误。

4

1 回答 1

2

@两个目的。一个触发“代码模式”,一个用于速记Response.Write

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

这一行:

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

应该:

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

请注意;不再需要。

于 2012-12-28T10:31:45.110 回答