Asp.net mvc、ajax和重定向到页面
想象以下情况:我想让用户取款。如果成功,我应该将他重定向到Asp.net mvc、ajax和重定向到页面,asp.net,ajax,asp.net-mvc,Asp.net,Ajax,Asp.net Mvc,想象以下情况:我想让用户取款。如果成功,我应该将他重定向到HomeController的Index操作。如果不是(例如,帐户余额小于取款金额),我希望显示基于验证的错误 现在,在项目阶段,我无法指定适当的验证规则(因为它不是像所需的这样的静态规则,余额一直在变化),所以我不得不在用户提交时进行一些运行时检查。没关系,但现在我开始想,在这种情况下,是否可以不在sumbit之后发回页面 因此,我尝试使用(Ajax.BeginForm(…){},在控制器的适当位置,我可以验证用户输入。如果这是错误的,
HomeController
的Index
操作。如果不是(例如,帐户余额小于取款金额),我希望显示基于验证的错误
现在,在项目阶段,我无法指定适当的验证规则(因为它不是像所需的这样的静态规则,余额一直在变化),所以我不得不在用户提交时进行一些运行时检查。没关系,但现在我开始想,在这种情况下,是否可以不在sumbit之后发回页面
因此,我尝试使用(Ajax.BeginForm(…){}
,在控制器的适当位置,我可以验证用户输入。如果这是错误的,我可以将错误添加到模型(常规或某些指定属性)并返回包含此错误的部分视图,不会导致页面回发。这与标准jQuery验证的行为相同,但当然它不会真正停止回发,只显示更新的部分视图
问题是如果输入是正确的,那么使用RedirectToAction(“Index”,“Home”)
将Index.cshtml
生成为局部视图(因此在本例中,我的布局的页眉和页脚会加倍),这是可以理解的,因为这仍然是AJAX请求
现在,我的问题是——首先,我的考虑需要吗?我的意思是,我只是认为在这种情况下不发回可能更方便用户。如果是这样,在这种情况下,有没有其他方法可以使用?我需要从给定的上下文(如数据库)中获取数据,那么我不能在客户端停止回发。您可以使用插件在客户端执行验证,而不需要与服务器进行任何实际交互。下面的链接中提供了一些简洁的解决方案:
下面是对上面链接的帖子中第一个JSFIDLE的改编
$.validator.addMethod("greaterThan",
function(value, max, min){
return parseInt(value) > parseInt($(min).val());
}, "Max must be greater than min"
);
$('#sales').validate({
rules: {
maxWithdrawal: {greaterThan: '#balance'}
}
});
有点不清楚您想要做什么。如果您最终想要重定向,请执行正常提交。在控制器中,您是否进行条件检查,如果无效,请添加ModelStateError
,并返回视图以显示错误(尽管您始终可以创建自己的条件验证属性以获得客户端验证)(或使用RemoteAttribute
)post后使用客户端脚本(javascript)重定向是否可以接受?