2015-02-05 4 views
1

Так что моя проблема проста. После отправки моей формы все значения формы удаляются.Предотвращение формы MVC для сброса значений формы

Рассматривая вопросы, заданные здесь в Stackoverflow, заставляет меня думать, что у большинства людей есть противоположная проблема, которая является поведением по умолчанию?

Во всяком случае на мой взгляд просто

@using (Html.BeginForm("Index", "Default")) 
{ 
    <input type="text" name ="FirstName" /> 
    <input type="text" name="LastName" /> 
    <input type="submit" value="Send" /> 
} 

А вот контроллер.

public class DefaultController : Controller 
{ 
    // GET: Default 
    public ActionResult Index() 
    { 
     var model = new FormViewModel(); 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(FormViewModel model) 
    { 
     return View(model); 
    } 
} 

Мои ViewModel

public class FormViewModel 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

} 

После отправки моих полей ввода пусты. Как сохранить значения в полях ввода? (в реальной жизни у меня есть гораздо больший вид, конечно)

+0

использовать Ajax.BeginForm вместо Html.BeginForm –

+0

ничего не меняет. Такое же поведение. – Nimble

ответ

0

Используйте HtmlHelpers текстовое поле

Html.TextBox("FirstName", Model.FirstName, new { 
    @class = "form-control", 
    PlaceHolder = "FirstName" 
}) 

Создание модели для захватить данные в контроллер, а также передать модель при визуализации вида

0

Что еще раз вызывает просмотр, пересылайте данные снова, как и в первый раз. Вид возврата (данные); где данные относятся к некоторому типу (предпочтительно ViewModel) и заполняются опубликованными данными формы (ожидаемыми от привязки данных).

это классика:

public ActionResult New() 
    { 
     return View(); 
    } 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult New (NewPlaceVM vm) 
    { 
     if (ModelState.IsValid && vm != null) 
     { 
      var model = Mapper.Map<NewPlaceVM, Place>(vm); 
      _place.New(model); 
      return RedirectToAction("Index"); 
     } 
     return View(vm); 
    } 

А Просмотр использовать EditorFor или любой другой помощник HTML, который подходит лучше всего

@model NewPlaceVM 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.TextBoxFor(model => model.Name, null, new { @class = "form-control" }) 
       @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.Ignore, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Ignore, null, new { @class = "form-control" }) 
       @Html.ValidationMessageFor(model => model.Ignore, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10 text-right"> 
       <input type="submit" value="@Ress.Ress.Create" class="btn btn-primary" /> 
      </div> 
     </div> 
    </div> 
} 
+0

@Tushar Gupta Я не видел проблему View – HerGiz

+0

Добавление @ Html.TextBoxFor (model => model.LastName); помог. Я надеялся, что я тоже этого не сделал, но, похоже, вокруг нет. – Nimble

+0

вы можете сделать он будет делать sam, но использование HTML-помощников умнее – HerGiz

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