剃须刀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有它所有的关闭标记。

剃须刀list< MyObject>元素未关闭

我认为要修复你的代码,你必须做以下事情:

@{ 
   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>
相关文章: