How to send model object in Html.RenderAction (MVC3)

后端 未结 3 1805
我寻月下人不归
我寻月下人不归 2020-12-15 04:59

I\'m using MVC3 razor, and I\'m trying to pass an object to a partial view, and it\'s not working.

This works fine without sending the object model to the partial vi

相关标签:
3条回答
  • 2020-12-15 05:08

    Usually if I have a model already available it makes more sense to use Html.Partial than trying to render an action.

    @Html.Partial("Foo", Model.FooModel)
    

    Where Foo.cshtml is a view file (perhaps in your Shared folder) strongly typed with with @model FooProject.Models.FooModel or whatever your model is called. This can be as complex a model as you need it to be. Model is your page's main model into which you must set FooModel - or just omit this parameter if the Foo view uses the same model as the parent page.

    RenderAction is generally better when you have just simple parameters, because you're just simulating a request to a regular action which has routing/query string parameters - and then dumping that response into your page. It works well if you need to put something in a Layout that isn't available in your page's model such as an element in a side bar.

    0 讨论(0)
  • 2020-12-15 05:16

    You can actually pass an object to a controller method using Action. This can be done on any avaialble view, for instance I have one in a shared library that gets built to project bin folders that reference my shared project (properties - Copy if newer on the view file, in Visual Studio). It is done like so:

    Controller:

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

    MVC page (using Razor syntax):

    @Html.Action("MyTestView", "Groovy", new { m = Model })
    

    or using RenderAction method:

    @{ Html.RenderAction("MyTestAction", "MyTestController", new { area = "area", m = Model }); }
    

    Note: in the @Html.Action(), the Model object must be of type MyModel and that 3rd parameter must be set to the controller variable name, of which mine is MyModel m. The m is what you must assign to, so I do m = Model.

    0 讨论(0)
  • 2020-12-15 05:23

    say you want to pass foo as model, make it first

    public class Foo {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    

    now make an ActionResult

    public ActionResult FooBar(Foo _foo){
        return PartialView(_foo);
    }
    

    call it

    @Html.RenderAction("FooBar", "Controller", new { Name = "John", Age=20 });
    
    0 讨论(0)
提交回复
热议问题