我的网页使用Jquery来重载屏幕。在此叠加层中,用户可以键入一些细节,然后单击“提交”按钮。
我想要做的是,当用户点击提交时,叠加层不会消失(就像刷新页面一样),但会显示一条消息,例如“全部完成”
我的问题是,正确的返回类型是什么?我确定,我已陷入困境。
我尝试制作返回类型字符串,并返回字符串。可悲的是,这会将我重定向到一个带有字符串值的页面。
然后我想我需要使用ContentResult()
返回return Content(myString)
。结果与返回字符串相同。
然后我尝试返回void,只是在我的控制器中使用ViewBag.Status ="All done";
现在这需要一个空页。
如何在不丢失状态的情况下让消息显示“全部完成”或“完成”?如果没有Ajax或类似的话,我是否会尝试不可能的事情?
答案 0 :(得分:2)
是的,你正试图做不可能的事。当控制器操作被同步请求(例如表单提交)命中时,您总是将获得整页加载。这正是同步请求 的原因。实际上,在您的操作代码运行之前已经发生了“刷新”;动作的返回类型是无关紧要的。对于部分更新,您需要一个异步请求,这意味着AJAX。
这种方法的典型方法是加载叠加层,然后通过AJAX从叠加层提交表单,返回局部视图并使用jQuery定位容器。您通常会为叠加层创建某种通用包装器,以便为任何叠加层中的所有表单帖子执行此操作。
或者,您可以查看返回JSON并使用Handlebars之类的JavaScript模板引擎来填充视图。
无论哪种方式,最好将所有这些包装在一些“通用”JavaScript代码中,这些代码将对所有叠加层中的表单帖子执行相同的操作;那么你就可以不再担心客户端代码,而只关注从控制器操作中返回正确的东西。
答案 1 :(得分:1)
如果你想在没有ajax的情况下这样做,你需要再次返回整个底层页面,包括弹出窗口处于可见状态。
你(可能)应该做的是使用ajax并返回json结果。像这个jQuery解决方案:
$(document).on('click', '[type="submit"]', function(){
var $form = $(this).closest('form');
$.ajax({
url: $form.action,
type: 'post',
data: $form.serialize(),
success: function(response){
// write success message to user
}
});
});