0

我有这个代码块:

@if (!String.IsNullOrEmpty(ViewBag.Error))
{
    <h2>Please, choose a Start date.</h2>
}
else
{
    if (Model.Count() > 0)
{
var lastArticolo = "";
<h2>
    Rapporti Capoturno @Model.First().rapportoCT.DLinea
</h2>
<table>
    @foreach (var rapporto in Model)
    {
        if (lastArticolo != rapporto.rapportoCT.DCodArt)
        {
        <tr>
            <td class="td_title">
                @rapporto.rapportoCT.DCodArt
            </td>
        </tr>
            lastArticolo = rapporto.rapportoCT.DCodArt;
        } using (Html.BeginForm("ControlloQualita", "Rapporti"))
        {
        <tr>
            <td class="td_detail">
                @Html.TextBox("PalletControllati", rapporto.PalletControllati, new { style = "width:50px" })
            </td>
            <td>
                <input type="submit" value="Update" />
            </td>
        </tr>
        }
    }
</table>
}
else
{
    @:No records found 
}
}

我在第 6 行收到错误: else 块缺少结束字符

错误位于倒数行,在@:No records found }.

也就是说,因为我使用了@:语法,所以关闭}被解释为字符串的一部分!

手动解决此问题的两个选项(当然,只有在您发现问题所在之后!):

  1. 将倒数行更改为使用 html 标记:<span>No records found</span> }
  2. 将收盘移动到{新的一行;

我是一个 mvc 新手,所以我可能会遗漏一些要点。我已经使用 ASP.NET 网络表单很长时间了,所以对我来说,这种 Razor 语法似乎非常混乱且容易出错,只是少了一点(主要归功于 MVC 模型-控制器-视图分离、MVC 模型绑定和 VS 智能感知...) 那个旧的 ASP 标签汤。

然而,这是一个非常简单的视图,尽管如此,我还是有很多令人头疼的缩进和微妙的语法错误……我无法想象当你必须以复杂的形式调试一些奇怪的行为时。

所以,最后,我的问题是:你如何使用这种剃刀语法管理视图的复杂性?复杂视图的复杂性是否会优雅地扩展?

4

2 回答 2

1

一个简单的解决方案是将 nor records found 行更改为:

else {
    @Html.Raw("No records found.") 
}
于 2013-11-05T09:22:11.077 回答
1

您需要指示剃须刀引擎返回到 C#,您可以使用<text>

@if (!String.IsNullOrEmpty(ViewBag.Error))
{
    <text><h2> Please, choose a Start date.</h2> </text>        
}
else
...

请注意,您可以使用更简单的语法:@:

于 2013-11-05T09:19:36.357 回答