Как я могу перенести одну форму представления в другое представление в MVC3? - PullRequest
2 голосов
/ 15 марта 2012

Может кто-нибудь помочь с переносом формы из одного представления в другое в MVC3 / C #?

Вот сценарий:

1) У меня есть страница создания, где у меня есть около 6 полей для пользователядля ввода после того, как пользователь отправит это поле, он перенаправит их на страницу обзора.

2) Когда пользователь зайдет на страницу обзора, там должна появиться информация, введенная им на странице создания (для подтверждения пользователем).

3) На странице обзора будет кнопка редактирования, поэтому, если пользователь нажимает кнопку редактирования, он должен вернуться на страницу создания, где он ввел всю информацию, чтобы он мог обновить их снова.

Можем ли мы справиться с этим сценарием, используя ViewData / ViewBag или частичное представление?Я не знаю, как это сделать.

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Вы должны создать класс в своей папке Models, назовем его MyViewModel, и вы определите в этом классе все 6 свойств, которые необходимо отредактировать пользователю.В представлении create все поле ввода будет отображаться внутри элемента формы, определенного для отправки обратно вашему действию review .Важной частью вашего представления будет:

@model MyViewModel
@using (Html.BeginForm("Review", "MyController"))
{
   //here there's your input field
   @Html.TextBoxFor(m => m.prop1)
   // and so on
}

В классе MyController вы будете иметь метод Review, определенный следующим образом:

public ActionResult Review(MyModel mm) 
{
    if (ModelState.IsValid)
    {
        return View(mm);
    } else return RedirectToAction("Create");
}

И, наконец, в вашем представлении Review, у вас будет:

 @model MyViewModel
 //show up all the field to be reviewed
 @Html.DisplayFor(m=>m.prop1)
 //and so on
 // now a form to pastback again all the data to the edit page
 @using (Html.BeginForm("Edit", "MyController"))
 {
   //here there's your hidden field
   @Html.HiddenFor(m => m.prop1)
   // and so on
   <input type="submit" value="Re-edit the fields"/>
 }

Ваш класс контроллера MyController будет иметь следующий код:

public class ViaggioController : Controller
{
public ActionResult Create() 
{
    var emptyModel = new MyViewModel();
    return RedirectToAction("Edit", new { mm = emptyModel });
}
public ActionResult Edit(MyViewModel mm) 
{    
    return View(mm);
}

public ActionResult Review(MyViewModel mm) 
{
    if (ModelState.IsValid)
    {
        return View(mm);
    } 
    else 
        return RedirectToAction("Create");
}
}
0 голосов
/ 15 марта 2012

Я вижу, что вы используете Asp.Net MVC, поэтому я предполагаю, что ваш Create View поддерживается объектом Model, который содержит 6 полей, которые вводит пользователь, и вы используете встроенную Проверка модели ?Если это так, все, что вам нужно сделать, это:

  1. После публикации формы в вашем действии Httpost Создать контроллер и состояние модели действительное, перенаправьте его в контроллер обзора, передав ему тот же объект модели, используяTempData [].
  2. Ваш контроллер обзора будет предоставлять представление для отображения содержимого объекта модели.Реализуйте ссылку редактирования в этом представлении, которая вызовет Create Controller.Вам понадобится какой-то способ передать ту же модель обратно в Create Controller.Вероятно, вы можете использовать TempData [] или Session, чтобы сделать это.Я не думаю, что вы можете передавать сложные объекты, то есть вашу модель, используя помощник ActionLink.
  3. Действие Httpost Create Crontroller получит модель и предоставит пользователю возможность редактировать свои данные.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...