我有一个剃刀声明:
Base.Hello.get()
这是渲染html表头的代码。因此,当我尝试调用视图时,我得到一个例外(从俄语翻译):
运算符只能用于赋值表达式,调用,递增,递减和期望
这是一个剃刀生成的代码部分,其中包含错误:
Child.Hello.get()
这里是一部分名为@{
var renderColumn = new Action<OlapReportColumn>(col =>
{
if (col.IsSpaned)
{
@<th colspan="@col.Columns.Count">@col.Caption</th>;
}
});
}
var renderColumn = new Action<OlapReportColumn>(col =>
{
if (col.IsSpaned)
{
#line default
#line hidden
item => new System.Web.WebPages.HelperResult(__razor_template_writer => { // ERROR HERE!
BeginContext(__razor_template_writer, "~/Areas/Report/Views/ReportsOlap/ReportTableGenerator.cshtml", 324, 3, true);
我在这里做错了什么?
答案 0 :(得分:1)
您定义的@<th colspan="@col.Columns.Count">@col.Caption</th>;
的行为与C#中的任何其他方法一样。行<th colspan="@col.Columns.Count">@col.Caption</th>
不只是输出到输出流;相反,编译器会看到一个不理解的语句,导致错误:
CS0201:只能将赋值,调用,递增,递减,等待和新对象表达式用作语句
为了将var renderColumn = new Action<OlapReportColumn>(col =>
{
WriteLiteral("<th colspan=" + col.Columns.Count + ">" + col.Caption + "</th>");
});
写入输出流,您可以使用WriteLiteral
方法:
Func
也许比这更惯用,但是会使用var renderColumn = new Func<OlapReportColumn, object>(col =>
{
return Html.Raw("<th colspan=" + col.Columns.Count + ">" + col.Caption + "</th>");
});
返回您想要的内容,然后在呼叫网站输出:
@foreach (var h in report.Header)
{
@(renderColumn(h))
}
然后需要稍微更改一下调用以告诉剃刀您希望输出结果:
Func
更进一步,内部支持Func
这种性质,如Phil Haack在this blog中所述。使用此方法,您的通话与上面的通话保持一致,但Func<OlapReportColumn, object> renderColumn2
= @<th colspan="@item.Columns.Count">@item.Caption</th>;
变为:
Func<T, HelperResult>
来自Phil Haack的博客
请注意,生成的委托是
%span(ng-if="user.streak_count" ng-pluralize count="user.streak_count" when="{'1': #{t('.one_streak_html')}, 'other': #{t('.streak_html')} }")
。此外,@ item参数是一个特殊的魔术参数。
答案 1 :(得分:0)
尝试更改HTML表格标题代码:
@<th colspan="@col.Columns.Count">@col.Caption</th>;
到此:
@:<th colspan="@col.Columns.Count">@col.Caption</th>;
在:
分隔符后立即插入冒号@
并检查是否有效。