使用Ajax的MVC Post Form(从部分视图)但没有任何重定向(保留在同一主视图页面上)

时间:2014-07-07 08:14:03

标签: jquery asp.net-mvc asp.net-mvc-4

我是MVC的新手,需要帮助。 我有一个主视图(index.vbhtml),这个页面成功呈现。我有一个局部视图(test.vbhtml),这个局部视图在发生事件时使用jquery get方法动态地添加到index.vbhtml。

$.get('@Url.Action("test", "abc")', function (data) {
                $('#partialViewRender').html(data);
            });

我能够成功渲染这个局部视图。我以这种方式添加局部视图,因为我有多个部分视图,它们将以类似的方式呈现,就像发生事件一样。所有这些部分视图将在同一个标​​记partialViewRender中呈现,一次只能呈现一个。

在这些局部视图中,我需要形成帖子。就像在测试局部视图上单击提交按钮一样,发生表单发布并调用后控制器操作。在动作方法内部,基于所选择的下拉相关数据值被提取并需要显示给用户。这是我被卡住的地方。我不希望我的主视图被重定向,我想要使用更新的数据呈现局部视图的相同主视图。换句话说,我希望在事件代码背后的经典asp应用程序中实现类似的行为。

我为此目的尝试了html提交按钮和Ajax.ActionLink。但他们都重定向到partialview网址。 ie localhost / test inside action方法我尝试使用PartialView,View,RedirectToAction,Json返回但没有成功。所有这些都重定向到一个新的URL。

这是来自控制器的代码

<HttpGet>
    Function test() As ActionResult 'this is called on jquery get method

       'do some intializing data stuff
        Return PartialView("test")

    End Function

    <HttpPost>
    Function test(id As String) As ActionResult

        'fetch data on basis of id, this data needs to be shown in a grid

    End Function

任何帮助都将是一件伟大的事。我完全被困在这里。

2 个答案:

答案 0 :(得分:0)

您可以使用AJAX在部分中发布表单来维护主视图。表单的操作将是处理它的控制器操作的路径(在您的情况下将路由到test(id as String))。您已使用$.get()表示您应该能够调整您已经拥有的代码$.post()

您需要使用jQuery将事件处理程序附加到表单的提交事件。在该处理程序中,您可以选择表单的action属性作为POST的URL,读取POST主体的表单元素值,并且您的回调可以就像您已经使用过的那样:

function (data) {
    $('#partialViewRender').html(data);
}

处理程序可以进行POST,控制器Action可以返回部分View,并且该内容将在页面加载时注入#partialViewRender元素。

替代方案强调VB代码。生成部分内容的原始调用必须指定调用它的主视图,以便它可以在包含该信息的表单中创建隐藏字段。然后,从表单处理POST的Action需要读取该隐藏字段值以确定要返回的主视图,以及如何以测试部分视图将使用的方式编写动态$.get()语句根据需要生成。

答案 1 :(得分:0)

我找到了处理这件事的方法。 发生我需要获取和渲染局部视图的事件。我之前使用的是$ .Get(),用

代替
@Ajax.ActionLink("Load Partial View", "test", "abc", New AjaxOptions() With {.UpdateTargetId = "partialViewRender", .InsertionMode = InsertionMode.Replace, .LoadingElementId = "progress"})

这将通过jquery ajax调用加载局部视图,问题解决了。但为了使其正常工作,我需要将包添加到脚本文件夹。在添加jquery.unobtrusive-ajax.js和jquery.unobtrusive-ajax.min.js后,我能够实现我想要做的事情。