我有此方法,下面对此方法进行了简化,以重现该问题,任何人都可以解释为什么抛出系统格式异常吗?
我曾尝试将@添加到格式字符串的开头,以防转义字符出现问题,但这没有帮助。
private void doThing(StringBuilder builder, string inPrimaryKey) {
// At this point the builder.ToString() results in " <div class="v-group width-100 shadowed OrderPanel"
// and inPrimaryKey is "OrderId"
// Throws System.FormatException with the detail "Input string was not in a correct format."
builder.AppendFormat(@" @if (Model.{0} > 0) { <text>StateNonEditable</text> } else { <text>StateEditable</text> }", inPrimaryKey);
}
有一些背景知识,我们正在使用此代码生成用于Web应用程序的cshtml页面,因此stringbuilder最初包含一些html,然后在format部分中添加了一些C#MVC Razor。
答案 0 :(得分:7)
谁能解释为什么抛出系统格式异常?
是:您的格式字符串包括以下内容:
{ <text>StateNonEditable</text> }
这不是有效的格式项。您需要通过将它们加倍来逃避不是属于格式项的括号:
builder.AppendFormat(
" @if (Model.{0} > 0) {{ <text>StateNonEditable</text> }} else {{ <text>StateEditable</text> }}",
inPrimaryKey);
或者,只需调用一次AppendFormat
,然后一次调用Append
:
builder.AppendFormat(" @if (Model.{0} > 0 ", inPrimaryKey)
.Append("{ <text>StateNonEditable</text> } else { <text>StateEditable</text> }");
老实说,这可能是一种更具可读性的解决方案。