内联如果预期}

时间:2015-03-31 12:43:06

标签: c# asp.net-mvc razor asp.net-mvc-5

只是尝试在我的局部视图中添加内联,但不断期待}

我想在自己的桌子上每5件物品

@model IList<PAL.Intranet.Models.MonitorDetailModel>

<div>
    @for (int i = 0; i < @Model.Count(); i++)
    {
        <table>
            <tr>
                @if (i % 5 == 0)
                {
                    <tr>
                }

                <td><img src="@if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.OK)
                              { @PAL.Intranet.Models.AlertStateImage.OK }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Alert)
                              { @PAL.Intranet.Models.AlertStateImage.Alert }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Warning)
                              { @PAL.Intranet.Models.AlertStateImage.Warning }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Critical)
                              { @PAL.Intranet.Models.AlertStateImage.Error }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Error)
                              { @PAL.Intranet.Models.AlertStateImage.Error }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Unknown)
                              { @PAL.Intranet.Models.AlertStateImage.Unknown }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Online)
                              { @PAL.Intranet.Models.AlertStateImage.OK }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Offline)
                              { @PAL.Intranet.Models.AlertStateImage.Error }"                                
                          width="24" height="24"/></td>
                <td><b>@Model[i].Item:</b></td>
                <td style="padding:0 0 0 15px;">@Model[i].TaskItem.ToString():&nbsp;&nbsp;</td>
                <td>@if (@Model[i].Output != null)
                    { @Model[i].Output }
                    else
                    { @Model[i].AlertState.ToString() }</td>
                <td style="padding:0 0 0 15px;">Captured:&nbsp;&nbsp;</td>
                <td>@Model[i].Captured</td>

                @if (i % 5 == 0)
                {
                    </td>
                }

            </tr>
        </table>
    }
</div>

更新1

仍然期待}。我想要的每5件物品都有自己的桌子。

@model IList<PAL.Intranet.Models.MonitorDetailModel>
<div>
    @for (int i = 0; i < @Model.Count(); i++)
    {
        @if (i == 0 | i % 5 == 0)
        {
            <table>
            <tr>
        }
            <td><img src="@if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.OK)
                            { @PAL.Intranet.Models.AlertStateImage.OK }
                            else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Alert)
                            { @PAL.Intranet.Models.AlertStateImage.Alert }
                            else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Warning)
                            { @PAL.Intranet.Models.AlertStateImage.Warning }
                            else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Critical)
                            { @PAL.Intranet.Models.AlertStateImage.Error }
                            else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Error)
                            { @PAL.Intranet.Models.AlertStateImage.Error }
                            else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Unknown)
                            { @PAL.Intranet.Models.AlertStateImage.Unknown }
                            else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Online)
                            { @PAL.Intranet.Models.AlertStateImage.OK }
                            else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Offline)
                            { @PAL.Intranet.Models.AlertStateImage.Error }"                                
                        width="24" height="24"/></td>
            <td><b>@Model[i].Item:</b></td>
            <td style="padding:0 0 0 15px;">@Model[i].TaskItem.ToString():&nbsp;&nbsp;</td>
            <td>@if (@Model[i].Output != null)
                { @Model[i].Output }
                else
                { @Model[i].AlertState.ToString() }</td>
            <td style="padding:0 0 0 15px;">Captured:&nbsp;&nbsp;</td>
            <td>@Model[i].Captured</td>

            @if (i == 0 | i % 5 == 0)
            {
                </tr>
                </table>
            }
    }
</div>

更新3

期望}在第1,3,39,39行

@model IList<PAL.Intranet.Models.MonitorDetailModel>
<div>       
    @for (int i = 0; i < @Model.Count(); i++)
    {
        if (string.IsNullOrWhiteSpace(@Model[i].Output))
        {
            Model[i].Output = @Model[i].AlertState.ToString();
        }

        string image = string.Empty;
        switch (@Model[i].AlertState)
        {
            case PAL.Intranet.Models.AlertState.OK:
                image = PAL.Intranet.Models.AlertStateImage.OK;
                break;
            case PAL.Intranet.Models.AlertState.Warning:
                image = PAL.Intranet.Models.AlertStateImage.Warning;
                break;
            case PAL.Intranet.Models.AlertState.Critical:
                image = PAL.Intranet.Models.AlertStateImage.Error;
                break;
            case PAL.Intranet.Models.AlertState.Error:
                image = PAL.Intranet.Models.AlertStateImage.Error;
                break;
            case PAL.Intranet.Models.AlertState.Unknown:
                image = PAL.Intranet.Models.AlertStateImage.Unknown;
                break;
            case PAL.Intranet.Models.AlertState.Online:
                image = PAL.Intranet.Models.AlertStateImage.OK;
                break;
            case PAL.Intranet.Models.AlertState.Offline:
                image = PAL.Intranet.Models.AlertStateImage.Error;
                break;
            default:
                image = PAL.Intranet.Models.AlertStateImage.Unknown;
                break;
        }

        @if (i % 5 == 0)
        {
            <table>           
        }
        <tr>
        <td><img src="@image" width="24" height="24"/></td>
        <td><b>@Model[i].Item:</b></td>
        <td style="padding:0 0 0 15px;">@Model[i].TaskItem.ToString():&nbsp;&nbsp;</td>
        <td>@Model[i].Output</td>
        </tr>
        @if (i % 5 == 0)
        {
            </table>
        }
    }
</div>

3 个答案:

答案 0 :(得分:1)

你试图每隔5个项目添加一个td,但是在if列中你需要初始化tr并最后尝试关闭td。根据发布的代码,标签不匹配。你能试试下面的代码吗?

@for (int i = 0; i < @Model.Count(); i++)
    {
        <table>
            <tr>
                @if (i % 5 == 0)
                {
                    <td>
                }

                <td><img src="@if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.OK)
                              { @PAL.Intranet.Models.AlertStateImage.OK }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Alert)
                              { @PAL.Intranet.Models.AlertStateImage.Alert }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Warning)
                              { @PAL.Intranet.Models.AlertStateImage.Warning }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Critical)
                              { @PAL.Intranet.Models.AlertStateImage.Error }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Error)
                              { @PAL.Intranet.Models.AlertStateImage.Error }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Unknown)
                              { @PAL.Intranet.Models.AlertStateImage.Unknown }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Online)
                              { @PAL.Intranet.Models.AlertStateImage.OK }
                              else if (@Model[i].AlertState == PAL.Intranet.Models.AlertState.Offline)
                              { @PAL.Intranet.Models.AlertStateImage.Error }"                                
                          width="24" height="24"/></td>
                <td><b>@Model[i].Item:</b></td>
                <td style="padding:0 0 0 15px;">@Model[i].TaskItem.ToString():&nbsp;&nbsp;</td>
                <td>@if (@Model[i].Output != null)
                    { @Model[i].Output }
                    else
                    { @Model[i].AlertState.ToString() }</td>
                <td style="padding:0 0 0 15px;">Captured:&nbsp;&nbsp;</td>
                <td>@Model[i].Captured</td>

                @if (i % 5 == 0)
                {
                    </td>
                }

            </tr>
        </table>
    }

答案 1 :(得分:1)

您可以将剃须刀块与开关盒结合使用。

@{
    string imageSource = string.Empty;
    switch (Model[i].AlertState) { 
        case PAL.Intranet.Models.AlertState.OK:
            imageSource = PAL.Intranet.Models.AlertStateImage.OK ;
            break;
        case PAL.Intranet.Models.AlertState.Alert:
            imageSource = PAL.Intranet.Models.AlertStateImage.Alert
            break;
        ...
    }
}

<td><img src="@imageSource" width="24" height="24"/></td>

修改

使用

@model IList<PAL.Intranet.Models.MonitorDetailModel>
<div>
    @for (int i = 0; i < @Model.Count(); i++)
    {
        string imageSource = string.Empty;
        switch (Model[i].AlertState) { 
            case PAL.Intranet.Models.AlertState.OK:
                imageSource = PAL.Intranet.Models.AlertStateImage.OK ;
                break;
            case PAL.Intranet.Models.AlertState.Alert:
                imageSource = PAL.Intranet.Models.AlertStateImage.Alert
                break;
            ...
        }

        @if (i % 5 == 0)
        {
            <table>           
        }
        <tr>
            <td><img src="@imageSource" width="24" height="24"/></td>
            <td><b>@Model[i].Item:</b></td>
            <td style="padding:0 0 0 15px;">@Model[i].TaskItem.ToString():&nbsp;&nbsp;</td>
            <td>@(Model[i].Output != null ? @Model[i].Output :@Model[i].AlertState.ToString())</td>
            <td>@Model[i].Captured</td>
        </tr>

        @if (i % 5 == 0)
        {             
            </table>
        }
    }
</div>

答案 2 :(得分:0)

&#34;问题&#34;使用你的代码Razor试图找到table元素的结束标记,并且因为你实际上从未用良好的语法关闭它,它显示你缺少for循环中的结束括号和表标签。如你所说,如果删除表标签效果很好,那么为了避免剃刀试图完成标签元素,因为&#34;错误&#34;告诉您,因为您没有结束标记,只需在@:<table>之前添加</table>,问题就会消失。

当然你需要确保你的html代码没问题,因为你告诉剃刀它是一个字符串,而不是一个表,但在HTML中它将呈现为<table>标签

 @model IList<PAL.Intranet.Models.MonitorDetailModel>
    <div>       
        @for (int i = 0; i < @Model.Count(); i++)
        {
            if (string.IsNullOrWhiteSpace(@Model[i].Output))
            {
                Model[i].Output = @Model[i].AlertState.ToString();
            }

            string image = string.Empty;
            switch (@Model[i].AlertState)
            {
                case PAL.Intranet.Models.AlertState.OK:
                    image = PAL.Intranet.Models.AlertStateImage.OK;
                    break;
                case PAL.Intranet.Models.AlertState.Warning:
                    image = PAL.Intranet.Models.AlertStateImage.Warning;
                    break;
                case PAL.Intranet.Models.AlertState.Critical:
                    image = PAL.Intranet.Models.AlertStateImage.Error;
                    break;
                case PAL.Intranet.Models.AlertState.Error:
                    image = PAL.Intranet.Models.AlertStateImage.Error;
                    break;
                case PAL.Intranet.Models.AlertState.Unknown:
                    image = PAL.Intranet.Models.AlertStateImage.Unknown;
                    break;
                case PAL.Intranet.Models.AlertState.Online:
                    image = PAL.Intranet.Models.AlertStateImage.OK;
                    break;
                case PAL.Intranet.Models.AlertState.Offline:
                    image = PAL.Intranet.Models.AlertStateImage.Error;
                    break;
                default:
                    image = PAL.Intranet.Models.AlertStateImage.Unknown;
                    break;
            }

            if (i % 5 == 0)
            {
                @:<table>           
            }
            <tr>
            <td><img src="@image" width="24" height="24"/></td>
            <td><b>@Model[i].Item:</b></td>
            <td style="padding:0 0 0 15px;">@Model[i].TaskItem.ToString():&nbsp;&nbsp;</td>
            <td>@Model[i].Output</td>
            </tr>
            if (i % 5 == 0)
            {
                @:</table>
            }
        }
    </div>

我知道这是一个很好的解决方案,但我的一位朋友曾经这样做过,而且他是如何解决这个问题的。希望这有帮助