代码之家  ›  专栏  ›  技术社区  ›  griegs

向视图传递两个值

  •  3
  • griegs  · 技术社区  · 14 年前

    好吧,我很确定我知道答案,但以防万一。

    我知道我可以将复合类传递给视图/局部视图。不过,我的问题是,我能在没有模型的情况下通过一个物体吗?

    所以有点像 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" } ); %>
    

    在我的部分观点中,我有这个观点;

    [<%= ViewData["id"] %>] 呈现出[];

    然而,这一点;

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

    给我一个文本框,里面有数字10。

    3 回复  |  直到 14 年前
        1
  •  3
  •   Matt Mitchell    14 年前

    当然。

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

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

    您将访问如下属性:

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

    你会使用 ViewUserControl 而不是 ViewUserControl(Of TModel) .

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

    This link 是一个很好的差异介绍:

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

        2
  •  0
  •   Cheng Chen    14 年前
    <%@ 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
  •  -1
  •   Craig    14 年前

    我认为你不能使用匿名类作为viewdata。