【问题标题】:How to make razor view engine treat "[" and "]" as literals and not index如何使剃刀视图引擎将“[”和“]”视为文字而不是索引
【发布时间】:2014-01-31 10:38:42
【问题描述】:

我非常需要使用自定义输入命名规则,例如:

<input type="text" value="1" name="products[123][qty]">

不能使用@HtmlTextBoxFor()

我决定将“products”和“qty”文本文字变为常量。对它也有强烈的需求。

然后我尝试了:

<input id="qty" type="text" value="1" name="@OrderContext.PRODUCTS_KEY[123][@OrderContext.QUANTITY_KEY]">

我得到一个错误,因为在 Razor 中使用了“[”和“]”,就像索引分隔符一样,我需要像字符串文字一样使用它。我试图用“\”转义它们,但后来我得到了 HTML 中的"\[""\]",而不是所需的“[”和“]”。

如何正确转义方括号?你有什么建议?

真正需要的是移动输入名称键,例如“products”和“qty”,以便在一个地方定义并稍后更改。

【问题讨论】:

    标签: asp.net-mvc razor razorengine


    【解决方案1】:

    试试

    <input id="qty" type="text" value="1" name="@(OrderContext.PRODUCTS_KEY)[123][@OrderContext.QUANTITY_KEY]">
    

    @ 之后的括号将解析为代码的范围限制为仅括号内的内容。

    【讨论】:

    • 太棒了!甚至比&lt;input id="qty" type="text" value="1" name="@(string.Format("{0}[{1}][{2}]", OrderContext.PRODUCTS_KEY, 123, OrderContext.QUANTITY_KEY))"&gt;还要短
    【解决方案2】:

    您可以争辩说您所做的事情与数据相关。所以它属于模型。所以编辑你的模型:

    public class OrderContext
    {
      public string PRODUCTS_KEY {get; set;}
      public int QUANTITY_KEY {get; set;}
      public string PRODUCTS_KEY_InputName
      {
        get
        {
          return string.format("{0}[123][{1}]", PRODUCTS_KEY, QUANTITY_KEY);
    
        }
      }
    
    }
    

    查看

    然后你可以简单地在你的视图中打印它:

    <input id="qty" type="text" value="1" name="@PRODUCTS_KEY_InputName">
    

    【讨论】:

    • 谢谢,现在决定使用&lt;input id="qty" type="text" value="1" name="@(string.Format("{0}[{1}][{2}]", OrderContext.PRODUCTS_KEY, 123, OrderContext.QUANTITY_KEY))"&gt;
    • 使用@Lasse Espeholt 解决方案甚至更短
    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 2011-03-16
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多