Показать ту же страницу после сохранения - PullRequest
7 голосов
/ 28 июля 2011

Я хотел бы показать форму с некоторым полем (одно в примере), отправить его, сохранить и отобразить ту же страницу со сбросом всех полей. Когда я отправляю запрос, я выполняю действие «Сохранить», но при отображении представления форма все еще заполнена.

Модель:

public class TestingModel
{
    public string FirstName { get; set; }
}

Контроллер:

    public class ChildController : Controller
{
    public ActionResult Index()
    {
        TestingModel model = new TestingModel();
        return View(model);
    }

    public ActionResult Save(TestingModel model)
    {
         Console.WriteLine(model.FirstName); //OK

        //Save data to DB here ...          

        TestingModel testingModel = new TestingModel() { FirstName = string.Empty };
        return View("Index", testingModel);
    }
}

Вид:

@using (Html.BeginForm("Save", "Child",FormMethod.Post))
{
    @Html.TextBoxFor( m => m.FirstName)
   <input type="submit" id="btSave" />
}

Когда Id отлаживается в представлении, в «окне Immediat» Model.FirstName = "", но когда страница отображается, у меня все еще есть опубликованное значение. Я попытался ReditrectionToAction("Index") в конце метода Save, но тот же результат.

У вас есть идея?

Спасибо

Ответы [ 3 ]

14 голосов
/ 28 июля 2011

Если вы хотите сделать это, вам нужно очистить все, что находится в ModelState.В противном случае HTML-помощники будут полностью игнорировать вашу модель и использовать данные из ModelState при привязке их значений.

Например:

[HttpPost]
public ActionResult Save(TestingModel model)
{
    //Save data to DB here ...          

    ModelState.Clear();
    TestingModel testingModel = new TestingModel() { FirstName = string.Empty };
    return View("Index", testingModel);
}

или просто перенаправить на действие Index GET в случае успеха:

[HttpPost]
public ActionResult Save(TestingModel model)
{
    //Save data to DB here ...          
    return RedirectToAction("Index");
}
0 голосов
/ 28 июля 2011

Вы должны отправить свою форму обратно на тот же ActionResult

public ActionResult Index()
    {
        TestingModel model = new TestingModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(TestingModel model)
    {
         Console.WriteLine(model.FirstName); //OK

        //Save data to DB here ...          


        return RedirectToAction("Index");
    }

Вы можете использовать перегрузку без параметров для BeginForm тоже

@using(Html.BeginForm())
{
   //form
}
0 голосов
/ 28 июля 2011

Попробуйте вернуть Index просмотр без какой-либо модели

  return View("Index");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...