Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc、ajax和重定向到页面_Asp.net_Ajax_Asp.net Mvc - Fatal编程技术网

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)重定向是否可以接受?