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

Mic*_*ael 23 asp.net-mvc asp.net-mvc-partialview razor asp.net-mvc-3

我正在使用MVC3剃刀,我正在尝试将对象传递给局部视图,但它无法正常工作.

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

Html.RenderAction("Index", "ViewName");
Run Code Online (Sandbox Code Playgroud)

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

Html.RenderAction("Index", "ViewName", objectModel);
Run Code Online (Sandbox Code Playgroud)

甚至可以使用RenderAction吗?

谢谢!

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

the*_*erm 33

您实际上可以使用Action将对象传递给控制器​​方法.这可以在任何avaialble视图上完成,例如我在共享库中有一个可以构建到引用我的共享项目的项目bin文件夹(属性 - 在视图文件中复制,如在Visual Studio中).它是这样完成的:

控制器:

public class GroovyController : Controller
{
    public ActionResult MyTestView(MyModel m)
    {
        var viewPath = @"~\bin\CommonViews\MyTestView";
        return View(viewPath, m);
    }
}
Run Code Online (Sandbox Code Playgroud)

MVC页面(使用Razor语法):

@Html.Action("MyTestView", "Groovy", new { m = Model })
Run Code Online (Sandbox Code Playgroud)

或使用RenderAction方法:

@{ Html.RenderAction("MyTestAction", "MyTestController", new { area = "area", m = Model }); }
Run Code Online (Sandbox Code Playgroud)

注意:在@Html.Action(),Model对象必须是类型MyModel,并且第三个参数必须设置为控制器变量名,我的是MyModel m.这m是你必须分配的,所以我做m = Model.

  • 这应该是公认的答案.感谢您在一年后添加它. (7认同)

Joh*_*n x 25

说你想foo成为模特,先把它做好

public class Foo {
    public string Name { get; set; }
    public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在制作一个ActionResult

public ActionResult FooBar(Foo _foo){
    return PartialView(_foo);
}
Run Code Online (Sandbox Code Playgroud)

叫它

@Html.RenderAction("FooBar", "Controller", new { Name = "John", Age=20 });
Run Code Online (Sandbox Code Playgroud)


Sim*_*ver 6

通常,如果我有一个已经可用的模型,那么使用它Html.Partial比尝试渲染一个动作更有意义.

@Html.Partial("Foo", Model.FooModel)
Run Code Online (Sandbox Code Playgroud)

其中Foo.cshtml一种观点文件(或许在你的共享文件夹)与强类型@model FooProject.Models.FooModel或任何你的模型被称为.这可能是您需要它的复杂模型.模型是您必须设置的页面主要模型FooModel- 如果Foo视图使用与父页面相同的模型,则只省略此参数.

RenderAction当您只有简单的参数时通常会更好,因为您只是模拟对具有路由/查询字符串参数的常规操作的请求 - 然后将该响应转储到您的页面中.如果您需要在页面模型中不可用的布局中放置某些内容(例如侧栏中的元素),则效果很好.