Razor和String.Format不适用于特殊字符

时间:2013-06-26 13:32:10

标签: c# asp.net-mvc razor

我有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 =“Test $ {}”

我期待aktenHeader =“Schnulli ./。测试$ {}”

2 个答案:

答案 0 :(得分:6)

你必须在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();    
}

答案 1 :(得分: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作为格式的一部分。