2015-01-26 6 views
0

У меня есть небольшое приложение ASP.NET MVC, где у меня есть несколько actionlinks в моем Index.html и следующий код в дома controllder.Как перейти от одного контроллера к следующему в ASP.Net MVC

Когда пользователь нажимает на Редактирование ActionLink, он берет под свой контроль метод action «Edit» HomerController (который имеет тип httpGet). Представление для этого метода действий - Edit.cshtml. Если я делаю некоторые манипуляции с данными в этом представлении EDIT ... и пытаюсь выполнить POST эти данные, что мне делать? Создать другой метод действия редактирования (httpPost) в том же HomeController? В этом случае мой домашний контроллер будет расти больше?

Если мне нужно написать отдельный контроллер для этой цели, как мне передать управление этому контроллеру? (Я имею в виду, как я присоединять мою вновь созданный Редактировать контроллер Edit View?)

List<StateCity> stateCityList = new List<StateCity>(); 
     public ActionResult Index() 
     { 
      StateCity sc1 = new StateCity() { Id = 1, StateName = "Dallas", Cities = new List<string>() { "ab", "cd" } }; 
      StateCity sc2 = new StateCity() { Id = 2, StateName = "Austin", Cities = new List<string>() { "ef", "gh" } }; 
      stateCityList.Add(sc1); 
      stateCityList.Add(sc2); 
      return View(stateCityList); 
     } 

     public ActionResult About() 
     { 
      ViewBag.Message = "Your application description page."; 
      return View(); 
     } 

     public ActionResult Contact() 
     { 
      ViewBag.Message = "Your contact page."; 
      return View(); 
     } 

     public ActionResult Edit(int id) 
     { 
      return View(); 
     } 

ответ

0

Как уже было сказано, добавьте еще одно действие с атрибутом HttpPost и параметром ViewModel в качестве параметра.

Ваш контроллер не будет расти, если вы будете следовать принципам SRP. На мой взгляд, у HomeController не должно быть таких действий, как «Редактировать». Я бы переместил их в соответствующий контроллер (например, ArticleController). Но у HomeController будут такие действия, как Index, About.

@Html.ActionLink("Edit Article", "Edit", "Article", new { id= 587 }, new { id = "linkId" }) 

Посмотрите здесь для более подробной информации: https://msdn.microsoft.com/en-us/library/dd504972(v=vs.118).aspx

+0

То, что я не знаю, как у меня есть еще один контроллер и и перейти к тому, что по ссылке в Index.cshtml. – Relativity

+0

@Relativity обновил ответ – Artiom

0

Вы можете создать Action для HTTP POST с помощью атрибута:

[HttpPost] 
public ActionResult Edit(parameters here){} 

Вот хороший example of forms in MVC

0

Обычно для редактирования у вас должно быть два действия.

One для загрузки на странице редактирования:

[HttpGet] 
public ActionResult Edit(int id) 

и один для отправки формы (выполнения редактирования):

[HttpPost] 
public ActionResult Edit(YourModel model) 

Если вы обеспокоены тем, что ваши методы контроллера становятся слишком большими , рассмотрим абстрагирование логического/экономного кода на другом уровне вашего приложения.

Смежные вопросы