【问题标题】:Razor and String.Format don't work with special charactersRazor 和 String.Format 不适用于特殊字符
【发布时间】:2013-06-26 21:50:35
【问题描述】:

我对 Razor 和 String.Format 有疑问。我有一个参数如下:

@{
string aktenHeader = Html.Raw(Model.Node.Aktenzeichen + string.Format("{0}" + Model.Node.Aktenkurzbezeichung, (Model.Node.Aktenzeichen != null && Model.Node.Aktenkurzbezeichung != null ? " ./. " : ""))).ToString();    
}

我得到了异常:输入字符串的格式不正确。

请帮助我的朋友。谢谢

编辑

Model.Node.Aktenzeichen = "Akte"

Model.Node.Aktenkurzbezeichung = "测试 ${}"

我期望 aktenHeader = "Schnulli ./.Test ${}"

【问题讨论】:

  • Model.Node.Aktenkurzbezeichung的值是多少?
  • Model.Node.Aktenkurzbezeichung 的价值是什么,你想达到什么目的?代码比较复杂,我们不知道数据是什么样的,也不知道你想要的结果是什么。
  • @JonSkeet, Andrei:我更新了我的帖子。感谢您的快速回复。

标签: c# asp.net-mvc razor


【解决方案1】:

你必须在 Model.Node.Aktenkurzbezeichnung 中转义你的花括号。

Model.Node.Aktenkurzbezeichung = "Test ${{}}"

这个问题已经得到解答,例如:How to escape braces (curly brackets) in a format string in .NET

如果您无法根据需要更改/替换大括号,那么我认为最简单的方法是不使用string.Format():

@{
   string aktenHeader = Html.Raw(Model.Node.Aktenzeichen + (Model.Node.Aktenzeichen != null && Model.Node.Aktenkurzbezeichung != null ? " ./. " : "") + Model.Node.Aktenkurzbezeichung).ToString();    
}

【讨论】:

  • 在 OP 的情况下可能是不可能的 - 如果字符串来自 DB 并按原样在其他几个地方使用怎么办?
  • 我建议在这里转义是错误的方法 - 据我所知,它根本不应该是格式字符串的一部分。
  • 我也不会在格式中替换它,如果可能的话,我会在 ViewModel 中替换它。否则我会在没有 string.Format() 的情况下工作。我已经更新了我的帖子。
  • @KevinBrechbühl:嘿,谢谢,我不再使用 string.Format() 了,我使用你的第二种方法,问题解决了 :)
【解决方案2】:

听起来您根本不应该在查询字符串中包含Model.Node.Aktenkurzbezeichung。你只是想在最后连接值,所以我怀疑你可以使用:

@{
    string x = Model.Node.Aktenzeichen != null &&
                   Model.Node.Aktenkurzbezeichung != null ? " ./. " : "";
    string aktenHeader = Html.Raw(Model.Node.Aktenzeichen + x +
                                  Model.Node.Aktenkurzbezeichung).ToString();    
}

为了清楚起见,我将长表达式提取为单独的局部变量。

如果你想使用string.Format,你仍然可以这样做:

string aktenHeader = Html.Raw(string.Format("{0}{1}{2}",
                              Model.Node.Aktenzeichen, x,
                              Model.Node.Aktenkurzbezeichung)).ToString();

从根本上说,重要的是要清楚数据的哪些部分应用作字符串格式,哪些部分应用作值 .您使用 Aktenkurzbezeichung 作为格式的一部分,但看起来您希望它被视为一个值。

【讨论】:

  • 谢谢乔恩,非常具体的答案。我试过你的答案,它也有效。赞赏。
猜你喜欢
  • 2014-08-09
  • 2016-03-03
  • 1970-01-01
  • 2016-09-13
  • 2019-09-17
  • 1970-01-01
  • 2020-04-02
  • 2021-09-05
  • 2015-02-27
相关资源
最近更新 更多