在ASP.NET Core2.0应用程序中,我需要呈现一个局部视图并传递一些参数:
@Html.Partial("Form", new { File = "file.pdf" })在局部视图上,我尝试使用以下命令访问它:
@Model.File然后我得到了错误:
RuntimeBinderException: 'object' does not contain a definition for 'File'如果我只是在我的部分上使用:
@Model我在页面上打印了以下内容:
{ File = file.pdf } 因此,模型正在被传递,其中有一个属性文件。
那么我错过了什么呢?
发布于 2017-09-08 00:06:54
您正在将非类型化(匿名类型)数据传递到分部视图。您不能使用@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>发布于 2017-09-08 00:10:57
您应该将dynamic作为您的局部视图的模型,这样,您就可以传递所有内容-比如您的匿名对象-它就会正常工作。添加:
@model dynamic添加到Form.cshtml文件。
发布于 2017-09-08 07:01:16
执行new { File = "file.pdf" }时,将传递包含属性文件的对象。因为它是object类型,所以不能在c#中直接访问它的任何变量。有一些丑陋的代码可以访问对象中的字段,比如可以在这里找到的代码:C# .NET CORE how to get the value of a custom attribute?
然而,在这种情况下,最推荐的方式(出于安全考虑)是创建一个类并传递该类的一个对象。
因此,如果您创建以下类:
public class MyFileInfo{
public string File { get; set }
}然后,您可以通过传递以下参数来创建对象:
@Html.Partial("Form", new MyFileInfo{ File = "file.pdf" })在局部视图中,首先定义模型类
@model MyFileInfo然后,在相同的文件中,您现在可以访问
@Model.Filehttps://stackoverflow.com/questions/46100200
复制相似问题