代码之家  ›  专栏  ›  技术社区  ›  Rob Walker

如何在名称中使用-指定属性

  •  4
  • Rob Walker  · 技术社区  · 14 年前

    我正在一个web应用程序中使用ASP.NET MVC和JQueryMobile。我想生成一个链接:

    <a href="/Whatever/Previous" data-role="button" data-icon="arrow-l">Previous</a>
    

    我有一个助手扩展方法,它允许我执行以下操作:

    <%= Html.ActionLink<WhateverController>(c => c.Previous(), 
             "Previous", 
             new { data-role = "button", data-icon="arrow-l" } ) %>
    

    除了 data-role data-icon 作为C#中的属性名无效。使用 @data-role 也不管用。

    有什么语法可以解决这个问题吗?或者我一直在创建一个更专业的助手,它知道正确的属性名。

    3 回复  |  直到 14 年前
        1
  •  8
  •   svick Raja Nadar    14 年前

    你应该可以使用 IDictionary<string, object> 而不是匿名对象:

    Html.ActionLink<WhateverController>(c => c.Previous(), 
         "Previous", 
         new Dictionary<string, object>
         {
              { "data-role", "button" },
              { "data-icon", "arrow-l"}
         })
    
        2
  •  8
  •   Eilon    14 年前

    除了svick的响应,我们在ASP.NET MVC 3中做了一个巧妙的更改,其中包含下划线的属性将自动将下划线转换为破折号。

    所以,如果你有这样的代码:

    <%= Html.ActionLink<WhateverController>(c => c.Previous(),  
         "Previous",  
         new { data_role = "button", data_icon="arrow-l") %> 
    

    它将使用破折号呈现标记:

    <a href="/Whatever/Previous" data-role="button" data-icon="arrow-l">Previous</a>  
    
        3
  •  1
  •   tvanfosson    14 年前

    因为该字符也是减法/一元减法运算符,所以不能在标识符中使用它。我认为自定义助手方法可能是您的最佳选择。