如何在Html.RenderAction(MVC3)中发送模型对象

时间:2012-01-22 06:20:01

标签: asp.net-mvc asp.net-mvc-3 razor asp.net-mvc-partialview

我正在使用MVC3剃刀,而我正在尝试将对象传递给局部视图,但它无效。

这可以正常工作,而无需将对象模型发送到局部视图:

Html.RenderAction("Index", "ViewName");

尝试这个不会发送模型对象,我会得到空值(对象有数据,视图需要它):'

Html.RenderAction("Index", "ViewName", objectModel);

甚至可以使用RenderAction吗?

谢谢!

编辑:我发现了错误,控制器的操作出现了错误,没有收到发送的对象。谢谢你的帮助!

3 个答案:

答案 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通常会更好,因为您只是模拟对具有路由/查询字符串参数的常规操作的请求 - 然后将该响应转储到您的页面中。如果您需要在页面模型中没有的布局中放置某些内容(例如侧栏中的元素),则效果很好。