我是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
任何帮助都将是一件伟大的事。我完全被困在这里。
答案 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后,我能够实现我想要做的事情。