首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将参数传递给ASP.NET核心中的部分视图

将参数传递给ASP.NET核心中的部分视图
EN

Stack Overflow用户
提问于 2017-09-07 23:30:51
回答 3查看 21.9K关注 0票数 15

在ASP.NET Core2.0应用程序中,我需要呈现一个局部视图并传递一些参数:

代码语言:javascript
复制
@Html.Partial("Form", new { File = "file.pdf" })

在局部视图上,我尝试使用以下命令访问它:

代码语言:javascript
复制
@Model.File

然后我得到了错误:

代码语言:javascript
复制
RuntimeBinderException: 'object' does not contain a definition for 'File'

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

代码语言:javascript
复制
@Model

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

代码语言:javascript
复制
{ File = file.pdf } 

因此,模型正在被传递,其中有一个属性文件。

那么我错过了什么呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-08 00:06:54

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

代码语言:javascript
复制
@ViewData.Eval("File")

传统的方法是创建一个强类型的ViewModel类,并将其传递给分部视图。然后,您可以作为@Model.File访问它。

代码语言:javascript
复制
public class SampleViewModel
{
    public string File { get; set; }
}

@Html.Partial("Form", new SampleViewModel { File = "file.pdf" })

在局部视图中,

代码语言:javascript
复制
@model SampleViewModel

<h1>@Model.File</h1>
票数 24
EN

Stack Overflow用户

发布于 2017-09-08 00:10:57

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

代码语言:javascript
复制
@model dynamic

添加到Form.cshtml文件。

票数 5
EN

Stack Overflow用户

发布于 2017-09-08 07:01:16

执行new { File = "file.pdf" }时,将传递包含属性文件的对象。因为它是object类型,所以不能在c#中直接访问它的任何变量。有一些丑陋的代码可以访问对象中的字段,比如可以在这里找到的代码:C# .NET CORE how to get the value of a custom attribute?

然而,在这种情况下,最推荐的方式(出于安全考虑)是创建一个类并传递该类的一个对象。

因此,如果您创建以下类:

代码语言:javascript
复制
public class MyFileInfo{
    public string File { get; set }
}

然后,您可以通过传递以下参数来创建对象:

代码语言:javascript
复制
@Html.Partial("Form", new MyFileInfo{ File = "file.pdf" })

在局部视图中,首先定义模型类

代码语言:javascript
复制
@model MyFileInfo

然后,在相同的文件中,您现在可以访问

代码语言:javascript
复制
@Model.File
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46100200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档