在PartialView中获取变量

Pet*_*ete 1 c# asp.net-mvc razor

假设我将数据传递给这样的部分视图

@Html.Partial("_LandingPage_CaseStudiesList", new { TrackAction = "Case Study Click", CaseStudies = Model.CaseStudies  })
Run Code Online (Sandbox Code Playgroud)

然后我如何获取部分数据?

我尝试过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>
Run Code Online (Sandbox Code Playgroud)

这是我调试时得到的图像:http://i.imgur.com/OiReWZv.gif

Dan*_*.G. 5

您可以将匿名对象作为模型传递给部分视图,就像您在问题中一样:

@Html.Partial("_LandingPage_CaseStudiesList", new { TrackAction = "Case Study Click", CaseStudies = "fsdffd" })
Run Code Online (Sandbox Code Playgroud)

那么你在局部视图中有几个选项:

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

  2. 将模型声明为动态(即包含类似的语句@model dynamic)

在这两种情况下,您都应该能够访问您的属性

@Model.TrackAction
@Model.CaseStudies 
Run Code Online (Sandbox Code Playgroud)

此外,您的视图文件中不会有智能感知,如果模型中不存在该属性,您将在运行时收到异常.