if语句中的MVC @ HTML.Action导致问题

时间:2015-02-17 16:34:15

标签: c# asp.net-mvc

我正在处理一个EDIT / New项目组合页面,想要查看项目列表,然后在HTML.Action()上调用默认值.Count > 0或在调用相同HTML.Action()的列表中循环1}}返回具有不同数据的相同局部视图。

到目前为止,

代码无效:

@{ 
    var list = @Model.MyList.FindAll(x=>x.somval == someotherval);

    if (list.Count == 0)
    {
        @Html.Action("MyFunc", "MyController", new { MyData = Default.Value });
    }
    else
    {
        foreach(var Item in @Model.MyList)
        {
            @Html.Action("MyFunc", "MyController", new { MyData = Item.Data });
        }
    }
}

问题是第一个}的结束@Html.Action()导致编译错误(预期',')。必须有一些我想念的简单但我似乎无法通过谷歌搜索找到问题。

编辑添加完整代码。

编辑:感谢Ashley Medway的回答(在我编辑之前发布以包含完整代码)我现在有以下工作

@{var list = @Model.MyList.FindAll(x=>x.somval == someotherval); }

@if (list.Count == 0)
{
    Html.Action("MyFunc", "MyController", new { MyData = Default.Value });
}
else
{
    foreach(var Item in list)
    {
        Html.Action("MyFunc", "MyController", new { MyData = Item.Data });
    }
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

您需要在if语句之前使用@ 并在foreach之前删除@

@if (Model.MyList.Count == 0)
{
    @Html.Action("MyFunc", "MyController", new { MyData = Default.Value })
}
else
{
    foreach (var Item in Model.MyList)
    {
        @Html.Action("MyFunc", "MyController", new { MyData = Item.Data })
    }
}

答案 1 :(得分:1)

我希望工作的代码如下所示:

@if (Model.MyList.Count == 0)
{
    @Html.Action("MyFunc", "MyController", new { MyData = Default.Value })
}
else
{
    foreach(var Item in Model.MyList)
    {
        @Html.Action("MyFunc", "MyController", new { MyData = Item.Data })
    }
}

FIX 1
剃刀视图中的if语句需要以@开头,假设if语句没有包装另一个代码块。

if (Model.MyList.Count == 0)更改为@if (Model.MyList.Count == 0)

FIX 2
@循环中删除foreach。由于我们已经在代码块中,因此我们不需要@来访问模型。

foreach(var Item in @Model.MyList)更改为foreach(var Item in Model.MyList)

FIX 3
;的末尾删除@Html.Action(...)。在剃刀视图中终止一行不需要分号。 使用HTML帮助程序时,在某些情况下仍然需要它,但编译器会告诉您:)

保留分号;实际上不会破坏您的视图,但会导致分号被添加到渲染的HTML中。