假设我想向我的部分视图传递一个产品
卡片。我想将产品
模型以及一些非模型变量传递到部分视图中,这些变量将基本上只是为了在单个卡片上添加css
样式类。我已经通过下面的部分标签助手代码传递了我的产品模型和非模型变量classList
、isFeatured
和isBestSelling
@for (var i = 0; i < 24; i++)
{
var classList = new List<string>();
var isFeatured = i == 0;
var isBestSelling = i == 1 || i == 2;
if (isFeatured)
{
classList.Add(@"border");
classList.Add(@"border-secondary");
}
else if (isBestSelling)
{
classList.Add(@"border");
classList.Add(@"border-success");
}
var product = Model.Products[i];
<div class="col-12 col-tablet-6 col-laptop-4 col-desktop-3 my-3">
<partial name="_ProductCardPartial" model="product" view-data='new ViewDataDictionary(ViewData){ { "isBestSelling", isBestSelling }, { "isFeatured", isFeatured }, { "classList", classList } }'/>
</div>
}
我该如何在局部视图中访问那个
ViewData
,因为它的模型不是包含ViewData
的索引页面,我也没有将其作为模型传递进去。我已经查看了来自Microsoft Docs的示例。他们只是使用了新的ViewData
字典,并将其传递给局部视图,这对我不起作用。我已经尝试在局部视图中初始化
Index
类型的新实例(其中包含PageModel
和继承的ViewData
),并像这样从视图数据设置变量:@{
var data = new Index();
bool isFeatured = (bool)data.ViewData["isFeatured"];
bool classList = (bool)data.ViewData["classList"];
bool isBestSelling = (bool)data.ViewData["isBestSelling"];
}
是的,我有正确的using语句来使用这个类型。但在构建时仍然出现了这个错误:
Error CS0120:非静态字段、方法或属性“RazorPageBase.WriteLiteral(object?)”需要对象引用
我尝试直接使用Index PageModel的完整路径,像这样:
Pages.Pages_Index.ViewData["isFeatured"]
然后我收到以下错误:
非静态字段、方法或属性“Pages_Index.ViewData”要求对象引用
此时,我不确定如何在局部视图中引用变量。
ViewData["isFeatured"]
? - Dimitris Maragkos