Как отправить объект модели в Html.RenderAction(MVC3)
Я использую бритву MVC3, и я пытаюсь передать объект частично, и он не работает.
Это отлично работает, не отправляя объектную модель на частичный вид:
Html.RenderAction("Index", "ViewName");
Попытка этого не отправляет объект модели, я получаю нули вместо этого (у объекта есть данные, и представление ожидает его): '
Html.RenderAction("Index", "ViewName", objectModel);
Возможно ли это с помощью RenderAction?
Спасибо!
Изменить: я обнаружил ошибку, произошла ошибка с действием контроллера, которое не забирало отправленный объект. Спасибо за вашу помощь!
Ответы
Ответ 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
, как правило, лучше, когда у вас есть только простые параметры, потому что вы просто имитируете запрос на регулярное действие с параметрами строки маршрутизации/запроса, а затем сбрасываете этот ответ на свою страницу. Он хорошо работает, если вам нужно поместить что-то в макет, который недоступен в вашей модели страницы, например, элемент в боковой панели.