剃须刀list< MyObject>元素未关闭
本文关键字:元素 list MyObject 剃须刀 | 更新日期: 2023-09-27 17:49:33
我有一个cshtml模板,我使用Razor填充它。我正在传递一个对象,其中有几个子列表,我需要从一个子列表中的一个项目中获取值,以便在文本的正文中使用。那么在开始标签中,我有这个:
@{
var myId = @Model.myId;
List<MyObject> newObj = @Model.MyList.Where(l => l.Id == myId).ToList();
}
但是当我尝试执行模板时,它抛出一个错误,'<'MyObject'>'没有关闭,所有元素必须有一个匹配的自关闭标记或结束标记。我明白,它似乎是阅读这作为一个html标签,但为什么,因为它显然在编程标记?我能在razor中不调用列表对象吗?如果是这样,我如何进入这个特定的子项列表?
我已经检查了页面的其余部分,html有它所有的关闭标记。
我认为要修复你的代码,你必须做以下事情:
@{
var myId = Model.myId;
List<MyObject> newObj = Model.MyList.Where(l => l.Id == myId).ToList();
}
它只是删除了Model's前面的@。
然而,我觉得一个更好的解决方案,你的问题是试图保持逻辑代码在你的控制器,而不是你的视图。
作为一个例子,如果你使用的是局部视图。
在你的视图中,你可以像这样调用一个动作并传入你的模型:
@Html.Action("MyAction", Model)
这将调用一个控制器动作来执行你的选择,也就是
[ChildActionOnly]
public ActionResult MyAction(MyModel model)
{
var newList = model.MyList.Where(l => l.Id == myId).ToList();
return PartialView("_MyPartial", newList);
}
然后在部分中使用@model
属性,即
@model List<MyObject>