在ASP.NET Core 2.0应用程序中,我需要渲染局部视图并传递一些参数:
@Html.Partial("Form", new { File = "file.pdf" })
在部分视图中,我尝试使用以下方式访问它:
@Model.File
我收到错误:
RuntimeBinderException: 'object' does not contain a definition for 'File'
如果我只是使用我的部分:
@Model
我在页面上打印了以下内容:
{ File = file.pdf }
所以模型正在传递,其中有一个属性文件。
那么我错过了什么?
答案 0 :(得分:11)
您正在将无类型的(匿名类型)数据传递给部分视图。您无法使用@Model.File
。相反,您需要使用ViewData的Eval方法来检索值。
@ViewData.Eval("File")
传统方法是创建强类型 ViewModel 类,并将其传递给局部视图。然后,您可以@Model.File
访问它。
public class SampleViewModel
{
public string File { get; set; }
}
@Html.Partial("Form", new SampleViewModel { File = "file.pdf" })
内部部分视图,
@model SampleViewModel
<h1>@Model.File</h1>
答案 1 :(得分:4)
您应该将dynamic
作为部分视图的模型,这样,您可以传递所有内容 - 比如您的匿名对象 - 并且它将正常工作。添加:
@model dynamic
到Form.cshtml文件。
答案 2 :(得分:0)
当您执行object
时,您正在传递包含属性文件的对象。由于此类型为public class MyFileInfo{
public string File { get; set }
}
,因此您无法直接访问c#中的任何变量。有一些丑陋的代码可以访问对象中的字段,例如可以在此处找到的字段:C# .NET CORE how to get the value of a custom attribute?
然而,在这种情况下,最推荐的方法(为了安全)是创建一个类并传递该类的对象。
因此,如果您创建以下类:
@Html.Partial("Form", new MyFileInfo{ File = "file.pdf" })
然后你可以传递:
来创建你的对象@model MyFileInfo
在局部视图中,首先定义模型类
@Model.File
然后在同一个文件中,您现在可以访问
import numpy as np
mat = np.empty((10, 3))
for idx in range(10):
mat[idx, :] = [1, 2, 3]
print(mat)