【问题标题】:Ajax call to update div on failure, or redirect to page on successAjax 调用以在失败时更新 div,或在成功时重定向到页面
【发布时间】:2011-08-02 02:54:39
【问题描述】:

背景:

我有一个弹出窗口,可以让我创建一个公司,这个弹出窗口有一个名为公司名称的文本字段,这是一个必填字段(使用支持视图模型上的 [Required] 数据注释)。

<div class="popup-editor">
    <h4 class="popup-title">
    Add new Company</h4>
    @using (Ajax.BeginForm("Create", "Company", new AjaxOptions { UpdateTargetId = "popup-editor", OnSuccess = "$.validator.unobtrusive.parse('form');" },))
    {
        @Html.ValidationSummary(true);
        <table>
            <tr>
               <td class="label">
                   Company Name
               </td>
               <td class="editor-field">
                    @Html.EditorFor(x => x.Name)
                    @Html.ValidationMessageFor(x => x.Name)
               </td>
            </tr>
        </table>
        <div class="popup-buttons">
            <a href="#" onclick="return togglePopupEditor();">Cancel</a>
            <input type="submit" value="Add Company" />
        </div>
     }
</div>

现在验证工作正常,当名称字段为空时,ajax 让我在弹出窗口中显示错误消息。

问题:

当没有验证错误时,我需要能够重定向到一个新页面(公司详细信息页面),而是将该页面插入到弹出内容所在的 div 中。例如:

public ActionResult Create(CreateCompanyModel model)
{
        if(!ModelState.IsValid)
        {
            return PartialView("_AddCompanyEditor");
        }

        Company c = CompanyService.Create(model.Name);
        return RedirectToAction("Details", new { companyId = c.Id });
}

有什么办法吗?强制对整个页面进行完全重定向,还是切换到标准 HTML 表单?

【问题讨论】:

    标签: c# asp.net-mvc-3 jquery jquery-validate


    【解决方案1】:

    不是真的。浏览器处理 AJAX 重定向而不通知调用 javascript 发生了什么。一种选择是返回包含重定向页面的 javascript 标记的 HTML 的小 sn-p。客户端的 jQuery 处理应该选择并运行它。

    大多数其他选项将涉及更改您的 AjaxOptions 以运行一个方法,该方法监视结果中的特定内容并根据响应以不同的方式执行操作。对于我目前从事的项目,我们所有的 AJAX 请求都经过一个特殊的“事件框架”,以便可以根据控制器操作返回的事件执行不同的操作。

    【讨论】:

    • 谢谢!我使用了您的第一个建议,虽然不是理想的解决方案,但效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    相关资源
    最近更新 更多