我正在使用MVC3剃刀,而我正在尝试将对象传递给局部视图,但它无效。
这可以正常工作,而无需将对象模型发送到局部视图:
Html.RenderAction("Index", "ViewName");
尝试这个不会发送模型对象,我会得到空值(对象有数据,视图需要它):'
Html.RenderAction("Index", "ViewName", objectModel);
甚至可以使用RenderAction吗?
谢谢!
编辑:我发现了错误,控制器的操作出现了错误,没有收到发送的对象。谢谢你的帮助!
答案 0 :(得分:33)
您实际上可以使用Action将对象传递给控制器方法。这可以在任何avaialble视图上完成,例如我在一个共享库中有一个构建到项目bin文件夹,引用我的共享项目(属性 - 在视图文件中复制,如在Visual Studio中)。它是这样完成的:
<强>控制器:强>
public class GroovyController : Controller
{
public ActionResult MyTestView(MyModel m)
{
var viewPath = @"~\bin\CommonViews\MyTestView";
return View(viewPath, m);
}
}
MVC页面(使用Razor语法):
@Html.Action("MyTestView", "Groovy", new { m = Model })
或使用RenderAction
方法:
@{ Html.RenderAction("MyTestAction", "MyTestController", new { area = "area", m = Model }); }
注意:在@Html.Action()
中,Model
对象必须是MyModel
类型,并且第三个参数必须设置为控制器变量名称,其中我的{{1} }。 MyModel m
是您必须分配的内容,因此我m
。
答案 1 :(得分:25)
说你想传递foo
作为模型,先把它作为
public class Foo {
public string Name { get; set; }
public int Age { get; set; }
}
现在制作一个ActionResult
public ActionResult FooBar(Foo _foo){
return PartialView(_foo);
}
称之为
@Html.RenderAction("FooBar", "Controller", new { Name = "John", Age=20 });
答案 2 :(得分:6)
通常,如果我有一个已经可用的模型,那么使用Html.Partial
比尝试渲染动作更有意义。
@Html.Partial("Foo", Model.FooModel)
Foo.cshtml
是一个视图文件(可能位于您的共享文件夹中),使用@model FooProject.Models.FooModel
或您调用的模型强烈输入。这可能是您需要它的复杂模型。模型是您必须设置FooModel
的页面主模型 - 或者如果Foo
视图使用与父页面相同的模型,则忽略此参数。
RenderAction
通常会更好,因为您只是模拟对具有路由/查询字符串参数的常规操作的请求 - 然后将该响应转储到您的页面中。如果您需要在页面模型中没有的布局中放置某些内容(例如侧栏中的元素),则效果很好。