Подтвердить что ты не робот

Как отправить объект модели в Html.RenderAction(MVC3)

Я использую бритву MVC3, и я пытаюсь передать объект частично, и он не работает.

Это отлично работает, не отправляя объектную модель на частичный вид:

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

Попытка этого не отправляет объект модели, я получаю нули вместо этого (у объекта есть данные, и представление ожидает его): '

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

Возможно ли это с помощью RenderAction?

Спасибо!

Изменить: я обнаружил ошибку, произошла ошибка с действием контроллера, которое не забирало отправленный объект. Спасибо за вашу помощь!

4b9b3361

Ответ 1

скажите, что вы хотите передать 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

Фактически вы можете передать объект методу контроллера с помощью 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 })

Примечание: в объекте @Html.Action объект Model должен иметь тип MyModel и этот 3-й параметр должен быть установлен на имя переменной контроллера, из которых my MyModel m. M - это то, что вы должны назначить, поэтому я делаю m = Model.

Ответ 3

Обычно, если у меня есть уже существующая модель, имеет смысл использовать Html.Partial, чем пытаться выполнить действие.

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

Где Foo.cshtml - это файл вида (возможно, в вашей общей папке), который строго типизирован с помощью @model FooProject.Models.FooModel или независимо от вашей модели. Это может быть такой же сложной модель, какой вам нужно. Модель - это основная модель вашей страницы, в которую вы должны установить FooModel - или просто опустить этот параметр, если представление Foo использует ту же модель, что и родительская страница.

RenderAction, как правило, лучше, когда у вас есть только простые параметры, потому что вы просто имитируете запрос на регулярное действие с параметрами строки маршрутизации/запроса, а затем сбрасываете этот ответ на свою страницу. Он хорошо работает, если вам нужно поместить что-то в макет, который недоступен в вашей модели страницы, например, элемент в боковой панели.