在分部视图中获取变量

本文关键字:获取 变量 视图 | 更新日期: 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" })

然后,您的分部视图中有几个选项:

  1. 不要在视图中声明模型(即不包含语句就像顶部的@model MyModel

  2. 将模型声明为动态(即包含类似 @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。