Передача ViewModel в ASP.Net MVC из представления в другое представление с помощью Get - PullRequest
2 голосов
/ 18 сентября 2009

У меня есть представление списка, которое имеет строго типизированную ViewModel, которая включает в себя список сущностей, с которым я работаю, вместе с некоторыми другими вещами типа сеанса, которые я несу вокруг.

При нажатии на элемент в списке (Html.ActionLink), чтобы перейти к представлению Details, я легко могу передать идентификатор объекта. Но я также хочу передать остальную часть ViewModel из View.

Я могу создать ActionLink с различными параметрами QueryString, а затем пользовательский ModelBinder может подобрать их и снова гидрировать объект ViewModel для меня. Однако мне это не нравится.

Я могу заставить пользовательский ViewModel повторно гидратировать, когда он помещается обратно на ту же страницу и т. Д., Но как я могу получить ViewModel в действие контроллера, используя GET для другого View без использования ModelBinder и просто поместив ViewModel объект как параметр в целевом методе Action?

Ответы [ 2 ]

1 голос
/ 18 сентября 2009

Я не думаю, что вы можете делать то, что вы хотите, из чего я заключаю следующее:

  1. При рендеринге действия List вы хотите создать ссылку на другое действие (возможно, на другом контроллере, но здесь это не является ключевым)

  2. Это действие при запуске должно иметь доступ к исходной модели представления, существовавшей при первом выполнении метода ActionLink.

К сожалению, элементы № 1 и № 2 полностью отсоединены друг от друга, и поэтому нет реального механизма для передачи текущей ViewModel по ссылке, которая будет выполняться в другом сеансе.

Это не значит, что нет обходных путей, конечно:

Вы можете создать ссылку действия следующим образом:

<%= 
    Html.ActionLink( 
                    "Label", 
                    "Action",  
                    "Controller",
                    new {Parameter1 = Model.Data1, Parameter2 = Model.Data2},
                    null
                   ) 
%> 

В вашем связанном методе действия вы можете создать экземпляр ViewModel, используя параметры, переданные этому методу действия.

0 голосов
/ 18 сентября 2009

Я только что попробовал это, и это, похоже, сработало. Также попробовал без формы, и это работало также. Не уверен, если это точно , что вы хотели.

Действие

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index(TestModel model)
{
  ViewData["Message"] = model.Test1;
  return View();
}

Модель

public class TestModel
{
  public string Test1 { get; set; }
  public string Test2 { get; set; }
}

Посмотреть

<% using (Html.BeginForm("Index","Home",FormMethod.Get))
{ %>
        <%=Html.TextBox("Test1")%>
        <%=Html.TextBox("Test2")%>
        <input type=submit value=submit />
<% }%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...