好的,我很确定我知道答案,但以防万一。
我知道我可以将复合类传递给视图/局部视图。我的问题是,我可以在没有模型的情况下传入一个对象。
类似于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号文本框。
答案 0 :(得分:3)
不确定
您的部分视图声明应如下所示:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
您将访问以下属性:
<%=ViewData.Eval("id")%>
您将使用ViewUserControl而不是ViewUserControl(Of TModel)。
这意味着您将访问ViewDataDictionary而不是ViewDataDictionary(Of TModel)并且将仅处理常规对象数据而不是强类型数据(以及字符串键而不是强类型属性)名)。
This link是对差异的一个很好的介绍:
ViewDataDictionary的第一种类型 是一个由类型组成的无类型集合 一个字符串和一个对象。字符串 代表键和对象 保存实际数据。像任何一样 无类型集合,对象可以 任何类型,但必须铸造到 在使用前正确的类型。项目 通过他们的密钥引用 ViewData属性 ViewUserControl(在一个案例中 PartialView)。第二是强烈的 类型集合,项目在哪里 的属性 ViewUserControl.Model属性。
答案 1 :(得分:0)
<%@ 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。
答案 2 :(得分:-1)
我认为您不能将Anonymous类用作ViewData。