У меня есть эта модель:
public class VehiculeModalViewModel
{
public VehiculeModalViewModel()
{
Title = "Nouveau véhicule";
TextToDisplay = "Nom du nouveau véhicule :";
}
[Display(Name = "Nom")]
[Required]
[StringLength(10)]
[Remote("IsVehiculeExists", "Defaults", HttpMethod = "POST", ErrorMessage = "Ce véhicule existe déjà.")]
public string Name { get; set; }
public string Title { get; set; }
public string TextToDisplay { get; set; }
}
И я использую частичное представление в качестве модальной формы (Вот только код привязки)
@model MultiRetouchesService.VehiculeModalViewModel
@Html.DisplayFor(m=>m.Title)
@Html.DisplayFor(m => m.TextToDisplay)
@Html.TextBoxFor(m => m.Name)
С основного вида I 'Использование помощника по формам Ajax.Begin для вызова метода контроллера и обновления другого частичного представления.
@using (Ajax.BeginForm("CreateNewVehicule", "Defaults", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "vehiculesList", InsertionMode = InsertionMode.Replace },new { Id = "vehiculeForm" }))
{
@Html.AntiForgeryToken()
Html.RenderPartial("_ModalForm", Model.VehiculeModalViewModel);
}
А вот метод контроллера (в основном, создайте транспортное средство и обновите другое частичное представление):
[HttpPost]
[ValidateAntiForgeryToken]
public PartialViewResult CreateNewVehicule(VehiculeModalViewModel vehicule)
{
if (ModelState.IsValid)
{
Vehicule newVehicule = _vehiculeService.CreateNewVehicule(vehicule.Name);
}
IEnumerable<Vehicule> allVehicules = _vehiculeService.GetAllVehicules();
return PartialView("_VehiculesList", allVehicules);
}
Если модальный объект утвержден (на стороне клиента и удаленно), я создаю новое транспортное средство, а после этого закрываю модальную форму.Это то, что я хочу.
Но, если я снова открою модальное поле, поле Textbox
по-прежнему содержит последний введенный name
.
Как этого избежать?
После замечаний Стивена я добавил следующие строки:
$("#submitVehicule").click(function () {
if ($('#vehiculeForm').valid()) {
$('#closeVehicule').click();
$('#vehiculeForm')[0].reset();
var form = $('#vehiculeForm');
form.data('validator', null);
$.validator.unobtrusive.parse(form);
}
})