【问题标题】:Pass Two Values to a View将两个值传递给视图
【发布时间】:2010-06-21 13:23:04
【问题描述】:

好的,我很确定我知道这个问题的答案,但以防万一。

我知道我可以将复合类传递给视图/部分视图。不过我的问题是我可以在没有模型的情况下传入一个对象吗?

比如Html.RenderPartial("MyPartialView", new { id=10, name="slappy" });

如果可以,局部视图会是什么样子?

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<?????>" %>

我将如何访问这些属性?

Model.id???

编辑

在我看来,这只是基于@Graphain 的解决方案的跟进;

<% Html.RenderPartial("PagedList", new { id="10" } ); %>

在我的局部视图中,我有这个;

[&lt;%= ViewData["id"] %&gt;] 渲染 [];

不过这个;

<%= Html.TextBox("id") %>

给我一​​个带有数字 10 的文本框。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    当然。

    您的局部视图声明应如下所示:

     <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
    

    您将访问这样的属性:

     <%=ViewData.Eval("id")%>
    

    您将使用ViewUserControl 而不是ViewUserControl(Of TModel)。

    这意味着您将访问 ViewDataDictionary 而不是 ViewDataDictionary(Of TModel) 并且将只处理常规对象数据而不是强类型数据(以及字符串键而不是强类型属性名称)。

    This link 很好地介绍了差异:

    第一类ViewDataDictionary 是一个无类型的集合,由 一个字符串和一个对象。字符串 表示键和对象 保存实际数据。像任何 无类型集合,对象可以是 任何类型,但必须强制转换为 在使用之前正确的类型。项目 通过它们在 ViewData 的属性 ViewUserControl(如果是 部分视图)。第二个是强烈的 类型化集合,其中项目 的属性 ViewUserControl.Model 属性。

    【讨论】:

    • 视图数据不在我的局部视图中。
    • 所以如果你去 ViewData["id"] 或 ViewData["slappy"] 什么都没有出现?
    • 是的,这是正确的。我认为这是 在我的 PV 中我有 [] 我看到的只是 []
    • 我正在调查,但你能帮我试试 吗?
    • @Graphain,Eval 工作,谢谢。您能否更新您的答案,以便其他人不必浏览我们所有的 cmets,然后我会将您的答案标记为答案。感谢您的帮助和耐心。
    【解决方案2】:
    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ExpandoObject>" %>
    

    在您的控制器中:

    var model = new ExpandoObject();
    model.id = 1;
    model.name = "John";
    model.DynamicAttrs = "anything dynamic";
    

    也许你对我们为什么不使用感到困惑:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
    

    理论上给出了一个类型是动态的模型。但是在这里我们不能,因为动态类型是作为“内部”生成的,您无法在视图中访问它。所以我们改用 ExpandoObject。

    【讨论】:

      【解决方案3】:

      我认为您不能将 Anonymous 类用作 ViewData。

      【讨论】:

      • 是的,这就是我的发现。 @Graphain 的代码在我运行它之前一直有效。 :) ViewData 没有遇到。
      • 您绝对可以使用基于字符串的索引器 ViewData["someProperty"] 使用 ViewData 访问该匿名类型的属性。这就是 Graphain 的帖子所显示的内容。
      猜你喜欢
      • 2011-08-10
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      相关资源
      最近更新 更多