使用MVC 3 RTM我变得很奇怪NullReferenceException:
@helper TestHelperMethod() {
var extra = "class=\"foo\"";
<div @Html.Raw(extra)></div>
}
Run Code Online (Sandbox Code Playgroud)
事实证明Html(类型HtmlHelper)是null.
我以前从未在常规视图中看过这个.我开始在Razor中尝试声明性辅助方法(到目前为止它们似乎有点受限)并且我对我在这里看到的东西感到非常难过.
在我当前的项目中,我有很多复杂的HTML报告,我们在那里使用rowpans和colspans对TR和TD进行大量的条件渲染.
它有时看起来像这样(这是非常简化的):
<tr>
@foreach (var ourItem in ourList) {
if (ourItem != ourList.First()) {
<tr>
}
<td></td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)
然而,Razor声称:"foreach循环缺少关闭"}"字符".(在Visual Studio中)
我一直在努力,包裹<tr>在<text></text>这使得收盘}问题消失在运行时只发现这一点:"遇到结束标记'TR’没有匹配的开始标记是你的开始/结束标记适当的平衡".
在说服Razor根本不打扰HTML时,我将如何进行这种条件渲染,因为当所有循环完成时HTML都是平衡的.或者至少在使用ASP.NET视图引擎时就是这种情况.
在Razor中,有一个奇怪的规则,即只允许在一个块内封闭 HTML if.
看到:
但我有一种情况,我想在某些条件下排除一些外部包裹元素.我不想重复所有内部HTML,这是相当数量的HTML和逻辑.
围绕这个问题的唯一方法是为内部的东西制作另一个部分视图以保持干燥吗?
没有任何其他重新使用这个新的部分,它感觉真的很尴尬,臃肿.我想知道这条规则是Razor的限制还是简单的纳米(烦人)功能.
我正在使用@:</div>正确显示一些引导列.这是我使用它的代码:
var i = 0;
<div class="container-fluid">
<div class="row show-grid">
@foreach (var one in Model)
{
if (i % 3 == 0)
{
@:<div class="row show-grid">
}
<div class="one-element col-md-4">
@one.Title
</div>
if ((i + 1) % 3 == 0)
{
@:</div>
}
i++;
}
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
它格式化(只要我不使用VisualStudio自动格式功能,它就可以正常工作):
@:</div>
Run Code Online (Sandbox Code Playgroud)
对此:
@:
</div>
Run Code Online (Sandbox Code Playgroud)
然后应用程序不再起作用了.
怎么解决这个问题?