【问题标题】:add model value in class name?在类名中添加模型值?
【发布时间】:2012-03-25 16:07:16
【问题描述】:

我试图弄清楚这个简单的事情,但实际上我很尴尬地问这样一个新手问题。我已经习惯了 mvc2 并且几天前我跳进了我的第一个 mvc3 项目。无论如何,问题是我如何在类名或 id 中添加模型值

<div class="remove-MODEL.ID">body...</div>

在 mvc2 中很简单

<div class="remove-<%= Model.Id %>">body...</div>

我当前的代码和尝试是(WORKS)

<div class="remove-@Model.Id">body...</div>

我尝试了一种字符串格式(WORKS)

<div class="@string.format("{0}", Model.Id)">body...</div>

我真的不知道,就像我说的,这么简单的事情变得最难:)

编辑
这真的很奇怪,但我的第三次和第四次建议在尝试了几次后奏效了

Erik Philips answer 得到了有关此问题的信息。

【问题讨论】:

  • 如果您使用的是 razor 视图引擎,您的建议 &lt;div class="remove-@Model.Id"&gt;body...&lt;/div&gt; 看起来不错。你有任何错误吗?
  • 没有错误它只是像在视图中一样写入html,remove-@Model.Id它不采用模型值。
  • 你能把模型上的其他东西打印到页面上吗?
  • 当我使用@string.Format("remove-{0}", Model.Id) 时,现在一切正常,真的很奇怪,但是它可以工作:)

标签: c# asp.net asp.net-mvc-3 razor


【解决方案1】:

这是 Razor 引擎的次要限制之一。问题在于引擎能够确定 @ 是剃刀语法还是只是普通的 html 文本。当剃刀输出为&lt;prefixvalue&gt;@&lt;model&gt;.&lt;value&gt; 时,此示例可能会频繁出现,因为这类似于电子邮件表达式&lt;name&gt;@&lt;emailprovider&gt;.com。您可以通过将表达式括在括号中来强制引擎采用剃刀语法(例如@(model.id))。

【讨论】:

    【解决方案2】:

    在我的项目中,我正在使用以下代码:

    <div class="remove_@Model.ElementAt(0).id">body...</div>
    

    而且效果很好。

    【讨论】:

    • 是的,我将它用于 mvc2,但对于 mvc3,它在使用 razor 时的语法不同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2018-10-20
    • 2010-12-17
    • 2021-10-06
    • 2014-10-17
    相关资源
    最近更新 更多