剃刀和字符串.格式don';不要用特殊字符

本文关键字:特殊字符 字符串 格式 don 剃刀 | 更新日期: 2023-09-27 18:20:02

我对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();    
}

我得到了一个例外:输入字符串的格式不正确。

朋友们,请帮帮我。感谢

编辑

型号.Aktenzeichen="Akte"

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

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

剃刀和字符串.格式don';不要用特殊字符

您必须在Model.Node.Aktenkurzbezeichnung中转义大括号。

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

这个问题已经得到了回答,即:如何在.NET 中转义格式字符串中的大括号(花括号)

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

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

听起来根本不应该在查询字符串中包含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作为格式的一部分时,看起来您希望它只是作为一个值来处理。