【问题标题】:Razor code between double quotes双引号之间的剃刀代码
【发布时间】:2010-11-22 20:11:01
【问题描述】:

在 Razor 视图引擎模板中,我想做以下事情:我想在 html attribute 的双引号之间放置一些 代码。问题是我要插入的代码本身包含一些双引号。

<a href="Url.Action("Item", new { id = Model.Item.Id, page = page });">@page</a>

你可以很容易地看到事情是如何变得非常错误的 :-) 我知道我可以计算变量中的链接然后使用它,但我宁愿不这样做:

@{ var action = Url.Action("Question", new { id = Model.Question.Id, page = page }); }                   
<a href="@action">@page</a>                                        

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 razor templating


    【解决方案1】:

    这可能是正确的:

    href="@(action)"> @page 
    

    【讨论】:

    • 很遗憾你被否决了 - 我的问题的解决方案是添加 @(xxx) 而不是没有 ()'s - 我想这就是你所说的 - 把'action' () 里面的东西 - 这完全解决了我的问题,@xxx 在 "" 内不起作用
    【解决方案2】:

    您无需使用 Razor 进行逃生或任何操作。 Razor 足够聪明,可以知道引号何时包含在属性中,因为您在解析 html 时会转义它。

    <a href="@Url.Action("Item", 
           new { id = Model.Item.Id, page = page })">@page</a>
    

    该代码可以正常工作 - 只需确保在 Url.Action 调用前面有 @ 符号,因为如果你不这样做,它将无法正确解析,我注意到你没有它你的问题。

    编辑:删除;因为 Url.Action 不是语句。

    【讨论】:

    • 一个注意:如果你的属性中需要一个常量前缀结合 Razor 表达式,你需要在 @ 字符后添加括号,否则 Razor 将其视为电子邮件地址。示例:id="prefix@(Model.Id)"
    【解决方案3】:

    也许我不明白你的问题,在这种情况下请纠正我,但你不能简单地说:

    @Html.ActionLink(page, "Question", new { id = Model.Question.Id, page = page })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-01
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 2017-04-16
      • 2014-09-04
      相关资源
      最近更新 更多