Mys*_*ond 1 c# stringbuilder razor
我有这个方法,我已经简化了重现问题,任何人都可以解释为什么抛出系统格式异常?
我已经尝试将@添加到格式字符串的开头,以防万一它是转义字符的问题,但它没有帮助.
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);
}
Run Code Online (Sandbox Code Playgroud)
有点背景,我们使用这段代码生成一个cshtml页面供web应用程序使用,所以stringbuilder最初包含一些html,然后我们在格式部分添加了一些C#MVC Razor.
任何人都可以解释为什么抛出系统格式异常?
是的:您的格式字符串包括:
{ <text>StateNonEditable</text> }
Run Code Online (Sandbox Code Playgroud)
这不是有效的格式项.你需要通过加倍来逃避不应该成为格式项的一部分的大括号:
builder.AppendFormat(
" @if (Model.{0} > 0) {{ <text>StateNonEditable</text> }} else {{ <text>StateEditable</text> }}",
inPrimaryKey);
Run Code Online (Sandbox Code Playgroud)
或者,只需拨打AppendFormat一次,然后Append再拨一次:
builder.AppendFormat(" @if (Model.{0} > 0 ", inPrimaryKey)
.Append("{ <text>StateNonEditable</text> } else { <text>StateEditable</text> }");
Run Code Online (Sandbox Code Playgroud)
说实话,这可能是一个更具可读性的解决方案.
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |