如何在Ajax提交后更新我的视图

4

我处于MVC环境中,我从我的View调用了一个Controller方法。Controller方法随后执行一些验证检查,并使用错误的模型状态返回到同一个View。

此时,我期望所有的验证字段都像下面这样:

<td>@Html.ValidationMessageFor(m => m.Comments)</td>

出现错误消息时应该亮起来。但这并没有发生。我认为这是因为我需要用新的错误模型重新加载视图。我该怎么做呢?

以下是我的Ajax代码摘录:

$("#Save").click(function () {
        var model = {
            ApplicationNumber: '@Model.ApplicationNumber',
            ApplicationId :'@Model.ApplicationId' ,
            Name: $('#Name').val(),
            CreateDate: $('#CreateDate').val(),
            OverrideHireDate: $('#OverrideHireDate').val(),
            Amount: $('#Amount').val(),
            VendorId: $('#Vendor').val(),
            Comments: $('#Comments').val(),
            CurrentState: '@Model.CurrentState',
            CurrentStatusDate: '@Model.CurrentStatusDate'
    };
        $.ajax({
            data: model,
            url: '@Url.Action("SaveApplication", "Applications")',
            type: "POST",
            success: function (result) {
                $(function () {
                    // some code to activate validation controls?
                });
            }
        });
    });

以下是我的控制器:

public ActionResult SaveApplication(ApplicationModel application)
        {
            if (!ModelState.IsValid)
            {
               // ModelState.AddModelError("Name", "This is a Test");
                return View("New",application);
            }

            ApplicationBLL.SaveApplication(application);
            return Content(string.Empty);
        }

你在调用 jQuery 的 post 方法之前,尝试过使用 jQuery validate() 方法吗? - MoXplod
你正在返回一个“新”视图,那么这个“新”视图的Razor也能显示错误吗?还是只有在原始视图上才有validationmessagefor的编写? - Subhash Dike
@SubhashDike:“新”视图是原始视图。我只是将控制器发送回它来的地方。 - Lost
@Coffeebean,只是为了确定这是验证返回问题还是仅仅是显示问题,你可以尝试将此代码放在顶部 @Html.ValidationSummary(true),这样我们至少可以看到是否存在任何错误。 - Subhash Dike
1
假设您已启用客户端验证,请处理表单的.submit()事件并检查$('form').valid()-如果为false,则取消默认提交并在不进行ajax调用的情况下退出函数。您可以通过仅使用data: '$('form').serialize(),来简化代码,这将执行您的var model = {...}所做的操作。 - user3559349
显示剩余4条评论
2个回答

8

好的,也许这很琐碎,但是这个技巧确实有用。

在 AJAX Post 的 OnSuccess 中,我加入了以下内容,然后它就起作用了:

 $("body").html(result);

3
如果您的值在数据库中被更新或者您在控制器中获取了这些值,您只需要在ajax调用的成功函数中添加以下代码:

最初的回答
location.reload(true);

最初的回答:

这将有效...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接