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

23

我正在使用MVC3 Razor,尝试将一个对象传递给部分视图,但不起作用。

如果不将对象模型发送到部分视图,则此方法可以正常工作:

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

尝试这样做并没有发送模型对象,我得到的是空值(该对象具有数据,而视图期望它):

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

使用RenderAction是否可能实现这个功能?

谢谢!

编辑:我找到了错误,控制器的操作存在问题,没有接收到发送的对象。感谢您所有的帮助!


1
你能提供你正在调用的操作的签名吗? - Ivo
为什么要将视图名称作为参数传递?你应该传递操作和控制器。 - Ivo
@Html.RenderAction("Index", "ViewName", new {objectParam1 = objectModel1, objectParam2 = objectModel2}) - Mangesh
3个回答

35

您可以使用Action将对象传递给控制器方法。这可以在任何可用的视图上完成,例如我有一个在共享库中构建的视图,它被构建到引用我的共享项目的项目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类型,并且第三个参数必须设置为控制器变量名,我的控制器变量名为MyModel m。你必须将m分配给它,所以我使用m = Model


7
这应该是被接受的答案。感谢在一年后添加它。 - Valamas
@Valamas-AUS 谢谢 :) - theJerm

27

假设你想将 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 });

谢谢你的回答。我在控制器的操作签名中忽略了一个错误。已经修复了,现在可以获取对象了。 - Michael
这个是否通过了ModelState? - aelstonjones
谢谢!但是我不得不用花括号包围Html.RenderAction调用才能使其工作。否则,Razor会说“无法隐式转换类型'void'为'object'”。 - burkay

6
通常如果我已经有可用的模型,使用Html.Partial比尝试呈现一个操作更有意义。
@Html.Partial("Foo", Model.FooModel)

Foo.cshtml是一个视图文件(可能在你的Shared文件夹中),使用@model FooProject.Models.FooModel或者你所定义的其他模型进行强类型支持。这个模型可以是任意复杂度的。将FooModel设置为你页面的主要模型,仅当Foo视图使用与父页面相同的模型时,可以省略此参数。

RenderAction通常更适用于只有简单参数的情况,因为它仅模拟了一个正常操作的请求,该请求具有路由/查询字符串参数,然后将响应转储到你的页面上。如果你需要在布局中放置一些在页面模型中不可用的元素,比如边栏中的元素,则它非常有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接