我在 MVC 中创建了一个表单,最初使用 javascript 序列化和 jQuery 到 $.post() 到控制器方法。这工作正常,除了单个字段由于某种原因没有绑定到方法参数,所以我切换到 MVC 内置模型绑定,而不是解决了这个问题。但是,这样做的结果是我的回复消息被切断了。我的验证消息仍然显示得很好,但是像“alert('saved')”这样的东西不起作用,我不知道如何做其他事情,比如有条件地刷新页面等等。
任何帮助表示赞赏。
谢谢。
编辑:
jQuery代码是:
$.post(
'controllerURL',
{
IRN: irn,
SepId: sepId,
JvsId: jvsId,
From: from,
To: to,
Notes: notes,
CTA: cta
},
function (data) {
if(data.Success == null) {
alert(data.Error);
return;
}
alert(data.Success);
reloadPage();
},
'json'
);
控制器方法如下所示:
[HttpPost]
public ActionResult UpdateJvsEntry(JVSDataEntryModel model) //(string IRN, int SepId, int? JvsId, DateTime From, DateTime? To, string Notes, int CTA)
{
if (model.To.HasValue && model.To.Value < model.From)
{
ModelState.AddModelError("Error", "To can not be prior to From.");
//return Json(new { Error = "To can not be prior to From." });
}
var entry = new EmisJvs();
if (model.JvsEntryId > 0)
{
entry = _jvsDataService.GetWhere(w => w.JvsId == model.JvsEntryId && w.SEPID == model.SepId).Single();
}
else
{
if (DoesJvsHaveOpenEntries(model.SepId))
{
ModelState.AddModelError("Error", "You must close out the current JVS entry before creating a new one.");
//return Json(new { Error = "You must close out the current JVS entry before creating a new one." });
}
entry.SEPID = model.SepId;
}
entry.SchoolIRN = model.SchoolIRN;
entry.From = model.From;
entry.To = model.To;
entry.Notes = model.Notes ?? string.Empty;
entry.Percentage = model.CTA;
entry.ChangedOn = DateTime.Now;
entry.ChangedBy = _userService.CurrentUser().SepId;
if (model.JvsEntryId == 0)
{
_jvsDataService.Insert(entry);
}
if (ModelState.IsValid)
{
_jvsDataService.SaveChanges(entry);
}
return View("JVSDataEntry", model);
}
另一个编辑:
我最终回到了我之前做的 $.post() 解决方案。通过本机 MVC 表单进行模型绑定路线与我正在使用的当前项目架构不一致,我只是在循环中运行,所以我只是备份并应用了 KISS。导致我调查模型绑定的最初问题与页面上或 jQuery 本身中的一个奇怪问题有关。我可以验证页面上是否存在 ID 为“Notes”的元素,但是当我这样做时,$('#Notes').val()
即使文本确实在输入框中,我也没有得到任何返回。我最终不得不做长格式的级联样式选择器并$('div[class=\'jvsDataEntryDiv\'] input[id=\'Notes\']').val()
改为工作。
谢谢,杰西和其他所有人。