假设我将数据传递给像这样的部分视图
@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>
这是我调试时得到的图像:http://i.imgur.com/OiReWZv.gif
答案 0 :(得分:5)
您可以按照问题的方式将匿名对象作为模型传递给部分视图:
@Html.Partial("_LandingPage_CaseStudiesList", new { TrackAction = "Case Study Click", CaseStudies = "fsdffd" })
然后在局部视图中有几个选项:
不要在视图中声明模型(即不要包含声明
比如顶部的@model MyModel
将模型声明为动态(即包含@model dynamic
之类的语句
在这两种情况下,您都应该能够像
一样访问您的媒体资源@Model.TrackAction
@Model.CaseStudies
此外,您的视图文件中不会有智能感知,如果模型中不存在该属性,您将在运行时收到异常。
答案 1 :(得分:2)
定义局部视图时,您可以定义将用作其数据上下文的类。即:
@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 })
如果您不想使用viewmodel,那么我建议您查看ViewBags等其他方法。