【问题标题】:Ajax Helper not redrawing the formAjax Helper 不重绘表单
【发布时间】:2015-02-13 23:35:48
【问题描述】:

我正在尝试使用Ajax.BeginRouteForm 创建可以分页和搜索的结果列表。总体思路是,视图顶部的菜单和布局不会被重绘,但搜索结果的中心区域会被重绘。

所以我有两个控制器操作,一个 GET,它返回一个初始模型和视图,一个 POST,它获取模型,从中获取页面/搜索信息,然后运行搜索,返回相同的模型和查看。

我看到的是 POST 有效,获得了新结果,并且正在使用这些新结果编译视图(调试代码告诉我这一点),但客户端的表单没有被重绘。

当我添加 InsertionMode 和 UpdateTargetId 参数时,我遇到了 view-inside-the-view 问题,其中整个菜单都在表单区域内呈现。

@using (Ajax.BeginRouteForm(ContentRoutes.EmailContentList,
    new { instance = UserContext.InstanceId },
    new AjaxOptions
    {
        HttpMethod = "POST",
        OnBegin = "blockForm();",
        OnComplete = "unblockForm();",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "frmContent"
    },
    new { id = "frmContent" }))

{

【问题讨论】:

    标签: ajax asp.net-mvc razor


    【解决方案1】:

    你应该有一个带有IDfrmContent的外部div,其中包含表单

    <div id="frmContent">
        @using (Ajax.BeginRouteForm(ContentRoutes.EmailContentList,
            new { instance = UserContext.InstanceId },
            new AjaxOptions
            {
                HttpMethod = "POST",
                OnBegin = "blockForm();",
                OnComplete = "unblockForm();",
                InsertionMode = InsertionMode.Replace,
                UpdateTargetId = "frmContent"
            }
        }
    </div>
    

    这是因为您将 AJAX 调用的结果添加到 frmContent HTML 元素。

    此外,您应该确保 AJAX 确实有效:在您的 Action 中使用 if (Request.IsAjaxRequest()) 并使用 调试器 检查它的值。

    【讨论】:

    • 这解决了不重绘的问题,但仍然存在view-inside-a-view的问题。我想我期待类似于 UpdatePanel 的行为,其中整个视图从服务器返回,但只有一个部分被重绘。
    • 请尝试在呈现的视图中添加
    • 我尝试了你的建议,但我仍然从表单外部获取 HTML 呈现到表单中。在您的解决方案中,您是否有返回相同视图的 GET 和 POST 操作?
    • 嗯...你确定 AJAX 有效吗?您所描述的内容听起来很像您的表单正在执行完整的 POST 而不是 AJAX 调用。这很容易检查,在您的操作和调试中使用if (Request.IsAjaxRequest())
    • 好的,不知道为什么今天早上它不工作,但它现在工作。谢谢!
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签