Я пытаюсь создать диалоговое окно Jquery, которое в основном представляет собой форму, которая принимает ввод от пользователя.
Вместо того, чтобы делать обычный диалог «сохранить и закрыть», я пытаюсь сделать диалог «сохранить и сделать что угодно, а затем закрыть, когда вам это нравится», что по сути означает, что модель представления передается в контроллер после нажатия сохранить в первый раз, вернется, а затем разрешить дальнейшее сохранение.
Мой код диалога с кнопкой сохранения выглядит так:
$(function () {
$("#EventDialog").dialog({
autoOpen: false, minWidth: 600, minHeight: 360, modal: true,
buttons: {
"Save": function () {
$.validator.unobtrusive.parse("#EventManage");
if ($("#EventManage").valid()) {
$.ajax({
url: "/Home/EventSave",
type: 'POST',
data: $("#EventManage").serialize(),
success: function (result) {
//alert("s");
$("#EventManage").html(result);
//$.validator.unobtrusive.parse("#EventManage");
LoadEventList();
}
});
Нажатие на кнопку сохранения диалога выполняет действие EventSave в контроллере.
public ActionResult EventSave(EventManageModel model)
{
if (ModelState.IsValid)
{
Event e = new Event();
try
{
//get existing event
if (!String.IsNullOrWhiteSpace(model.EventID))
{
Guid id = default(Guid);
if (Guid.TryParse(model.EventID, out id))
e = EventService.GetRecord(id, usr);
}
e.Name = model.Event_Name;
e.Date = DateTime.Parse(model.Event_Date);
e.Sender = usr;
e = EventService.SaveUpdateEvent(e);
//just to update the model with saved data.
model.EventID = e.Id.ToString();
model.Event_Name = e.Name;
model.Event_Date = e.Date.ToString("dd/MM/yyyy");
TempData["Message"] = string.Format("Event saved successfully.");
}
catch (ApplicationException ex)
{
ModelState.AddModelError("_FORM", ex.Message);
}
}
}
return PartialView("EventManage", model);
}
В моей модели есть Eventid, который отслеживает, какое событие настраивается.
public class EventManageModel
{
[HiddenInput(DisplayValue = false)]
public string EventID { get; set; }
[Required]
[Display(Name = "Event Name")]
public string Event_Name { get; set; }
[Display(Name = "Event Date [DD/MM/YYYY]")]
[RegularExpression(@"^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$", ErrorMessage = ExceptionConstants.ERR_DATE_INVALID)]
public string Event_Date { get; set; }
}
В тот момент, когда я нажимаю кнопку «Сохранить» в первый раз, модель, переданная в действие в контроллере, является действительной, с полными действительными данными. возвращенный вид загружается в соответствии с выполнением кнопки вышеупомянутого диалога. однако, сохраняя его во второй раз, передаваемая модель является нулевой.
Это поведение должно быть таким? Или что-то не так с моим кодом где-то?
EDIT
После публикации я запускаю firebug, и кажется, что эта ошибка появляется, когда я нажимаю на любое из текстовых полей в диалоговом окне (которое я не знаю, что бы это значило)
f не определено
[Прервать эту ошибку] ""); f.settings [g] && f.settings [g] .call (... / \ s /), функция (g, h) {b [h] = e})} ); var d =
jquery .... min.js (строка 22)
Есть идеи?