在分部视图中获取变量
本文关键字:获取 变量 视图 | 更新日期: 2023-09-27 17:56:44
假设我像这样将数据传递给部分视图
@Html.Partial("_LandingPage_CaseStudiesList", new { TrackAction = "Case Study Click", CaseStudies = Model.CaseStudies })
然后,如何获取部分数据?
我已经尝试了Model["TrackAction"]
和Model.TrackAction
但都没有用,我不知道还能尝试什么。
如果我调试到代码中,我可以看到属性,但只是不知道使用什么来恢复它们
这是我的部分
<ul id="case-studies-list" class="table">
@{
int counter = 1;
foreach (Asset caseStudy in caseStudies)
{
<li class="@(counter == 1 ? "first " : string.Empty)cell">
<a href="@caseStudy.Url" class="track-event" data-action="@trackAction" data-label="Case Study Download" data-value="@caseStudy.Name" target="_blank">
<span class="sprite @string.Format("case-study{0}", counter)"></span>
<span class="text">
@Html.Raw(caseStudy.Name)<br />
<span class="font11">@Html.Raw(caseStudy.Location)</span>
</span>
</a>
</li>
counter++;
}
}
</ul>
这是我调试时得到的图像:https://i.stack.imgur.com/4Gs92.gif
您可以将匿名对象作为模型传递给部分视图,就像您在问题中所做的那样:
@Html.Partial("_LandingPage_CaseStudiesList", new { TrackAction = "Case Study Click", CaseStudies = "fsdffd" })
然后,您的分部视图中有几个选项:
不要在视图中声明模型(即不包含语句就像顶部的
@model MyModel
)将模型声明为动态(即包含类似
@model dynamic
的语句)
在这两种情况下,您都应该能够访问您的属性,如下所示
@Model.TrackAction
@Model.CaseStudies
此外,您的视图文件上不会有智能感知,如果模型中不存在该属性,您将在运行时收到异常。
定义分部视图时,您可以定义它将使用哪个类作为其数据上下文。 即:
@model SomeViewModel
MVC 要求这是具体类型。因此,我建议在您的项目中创建一个名为 ViewModels
的文件夹,并创建一个类来保存您的信息。所以举个例子:
public class MyViewModel
{
public string TrackAction { get; set; }
public string CaseStudies { get; set; }
}
然后,您可以在定义分部视图时使用它,如下所示:
@Html.Partial("_LandingPage_CaseStudiesList", new MyViewModel{ TrackAction = "Case Study Click", CaseStudies = Model.CaseStudies })
如果您不想使用视图模型,那么我建议您研究其他方法,例如ViewBags。