gpt4 book ai didi

c# - razor list 元素未关闭

转载 作者:行者123 更新时间:2023-11-30 12:28:18 24 4
gpt4 key购买 nike

我有一个 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();
}

这只是删除模型前面的@。

但是我觉得更好的解决方案是尝试将逻辑代码保留在 Controller 中而不是 View 中。

例如,如果您使用的是分部 View 。

在您看来,您可以像这样调用一个操作并传入您的模型:

@Html.Action("MyAction", Model)

这将调用一个 Controller 操作来执行您的选择,即

[ChildActionOnly]
public ActionResult MyAction(MyModel model)
{
var newList = model.MyList.Where(l => l.Id == myId).ToList();
return PartialView("_MyPartial", newList);
}

然后在您的部分中使用 @model 属性,即

@model List<MyObject>

关于c# - razor list<MyObject> 元素未关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22309553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com