我正在处理一个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 });
}
}
感谢您的帮助。
答案 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中。