将参数传递给ASP.NET Core中的Partial View

Mig*_*ura 8 asp.net-core asp.net-core-1.0 asp.net-core-2.0

在ASP.NET Core 2.0应用程序上,我需要渲染局部视图并传递一些参数:

@Html.Partial("Form", new { File = "file.pdf" })
Run Code Online (Sandbox Code Playgroud)

在部分视图中,我尝试使用以下方法访问它:

@Model.File
Run Code Online (Sandbox Code Playgroud)

我收到错误:

RuntimeBinderException: 'object' does not contain a definition for 'File'
Run Code Online (Sandbox Code Playgroud)

如果我只是使用我的部分:

@Model
Run Code Online (Sandbox Code Playgroud)

我在页面上打印了以下内容:

{ File = file.pdf } 
Run Code Online (Sandbox Code Playgroud)

所以模型正在传递,其中有一个属性文件.

那我错过了什么?

Win*_*Win 16

您正在将无类型(匿名类型)数据传递给局部视图.你不能使用@Model.File.相反,您需要使用ViewData的Eval方法来检索值.

@ViewData.Eval("File")
Run Code Online (Sandbox Code Playgroud)

传统方法是创建强类型的ViewModel类,并将其传递给局部视图.然后你可以访问它@Model.File.

public class SampleViewModel
{
    public string File { get; set; }
}

@Html.Partial("Form", new SampleViewModel { File = "file.pdf" })
Run Code Online (Sandbox Code Playgroud)

在局部视图内,

@model SampleViewModel

<h1>@Model.File</h1>
Run Code Online (Sandbox Code Playgroud)


Ric*_*res 6

您应该将dynamic其作为部分视图的模型,这样您就可以传递所有内容 - 就像您的匿名对象一样 - 并且它会正常工作。添加:

@model dynamic
Run Code Online (Sandbox Code Playgroud)

到 Form.cshtml 文件。