【问题标题】:How is @ used in MVC Razor and when is it required?在 MVC Razor 中如何使用 @ 以及何时需要它?
【发布时间】:2012-12-28 10:29:35
【问题描述】:

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

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

    @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.HiddenForforeach 行没有@ 前缀。 生成的 HTML 应生成 &lt;form&gt; 后跟 &lt;input type="hidden"&gt; 字段。 但是,在检查生成页面上的 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 会产生错误。

【问题讨论】:

  • 你能提供编译错误吗?视图通常不会被编译。

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


【解决方案1】:

@ 有两个用途。一个触发“代码模式”,一个用于简写Response.Write

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

这一行:

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

应该是:

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

请注意,; 不再需要。

【讨论】:

  • 但是,如果我添加了 @ 前缀,我的代码将无法编译。 VS 产生错误
  • 视图通常不会被编译。您是否使用 RazorGenerator 等工具创建编译视图?
  • 不,我让 VS 在编译时检查代码。我在项目文件中添加了&lt;MvcBuildViews&gt;true&lt;/MvcBuildViews
  • 但这回答了我的问题。谢谢!不过,我不能接受它,直到稍后
  • 将编译错误作为一个新问题提出来,我来看看。
猜你喜欢
  • 2018-05-16
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
相关资源
最近更新 更多