2

我在 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()改为工作。

谢谢,杰西和其他所有人。

4

1 回答 1

1

当您从帖子中返回视图时,您的客户端消息不起作用。如果您想处理刷新客户端,那么您可能应该返回某种形式的 json 结果:

return new JsonResult
{
    JsonRequestBehavior = JsonRequestBehavior.AllowGet,
    Data = new { Success = "Some success message here" }
};

编辑:根据您的评论,我不相信您的 jQuery $.post 函数设置正确。尝试添加以下内容:

dataType: 'json',
contentType: 'application/json; charset=utf-8',
于 2012-05-14T15:57:48.397 回答