【问题标题】:mvc, ajax and redirect to pagemvc、ajax 和重定向到页面
【发布时间】:2016-04-18 09:45:54
【问题描述】:

想象以下情况:我想让用户提款。如果成功,我应该将他重定向到名为IndexHomeController 的操作。如果不是(例如,账户余额小于提款金额),我想显示基于验证的错误。

现在,我无法在项目阶段指定适当的验证规则(因为它不是像 Required 这样的静态规则,所以余额一直在变化),所以我不得不对用户提交进行一些运行时检查.没关系,但现在我开始怀疑在这种情况下是否可以在 sumbit 后不回发页面。

因此,我尝试了@using(Ajax.BeginForm(...){},并且在控制器的适当位置我可以验证用户输入。如果这是不正确的,我可以将错误添加到模型(一般,或某些指定的属性)并返回包含此错误的部分视图,而不会导致页面回发。这与标准 jQuery 验证的行为相同,但当然它并没有真正停止回发,只是显示更新的部分视图。

问题是如果输入正确-然后使用RedirectToAction("Index", "Home") 也会生成Index.cshtml 作为部分视图(因此在这种情况下,我的布局的页眉和页脚加倍)这是可以理解的,因为它仍然是 AJAX 请求。

现在,我的问题是——首先,我是否需要考虑?我的意思是,我只是认为在这种情况下不回发可能对用户更友好。如果是这样,在这种情况下我可以使用其他方法吗?我需要从给定的上下文(如数据库)中获取数据,然后我不能只在客户端停止回发。

【问题讨论】:

  • 有点不清楚你想做什么。如果您最终想要重定向,请执行正常提交。在控制器中,您是否进行条件检查,如果无效,请添加 ModelStateError 并返回视图以便显示错误(尽管您始终可以创建自己的条件验证属性以便获得客户端验证(或使用 @987654328 @)
  • 发布后是否可以使用客户端脚本 (javascript) 进行重定向?

标签: asp.net ajax asp.net-mvc


【解决方案1】:

您可以使用Jquery Validate 插件在客户端执行验证,而无需实际与服务器交互。下面的链接中有几个巧妙的解决方案:

How can I validate that the max field is greater than the min field?

下面是对上面链接的帖子中第一个 jsfiddle 的改编。

$.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'}
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多