小编Woo*_*Bob的帖子

如何在使用jQuery Unobtrusive Validation时添加'submitHandler'函数?

我正在使用ASP.NET MVC 3中新的不显眼的验证功能验证表单.

因此,我没有编写代码来设置jQuery验证以开始验证我的表单.这一切都是通过加载jQuery.validate.unobtrusive.js库来完成的.

不幸的是,我需要打个招呼'你确定吗?' 表单有效但在提交之前的消息框.使用jQuery验证,你会在初始化时添加选项handleSubmit:

$("#my_form").validate({
  rules: {
    field1: "required",
    field1: {email: true },
    field2: "required"
  },
  submitHandler: function(form) {
     if(confirm('Are you sure?')) {
       form.submit();
     }
  }
});
Run Code Online (Sandbox Code Playgroud)

但是在使用不显眼的库时,您不需要初始化.

在这种情况下,我可以在哪里/如何添加提交处理程序?

谢谢

jquery jquery-validate unobtrusive-validation asp.net-mvc-3

43
推荐指数
4
解决办法
2万
查看次数

使用requirejs可以检查模块是否定义而不尝试加载它?

我希望能够选择性地定义模块,然后在我的代码中使用或不使用它.我正在考虑的特殊情况是在调试/测试环境中加载模拟/存根模块,但不是在我上线时.这是一个例子:

在html文件中,可以选择加载js文件(伪代码):

//index.cshtml
...
<script src="/Scripts/lib/require.js"></script>
<script src="/Scripts/app/service_user.js"></script>
<script src="/Scripts/app/real_service.js"></script>
#if DEBUG
<script src="/Scripts/app/mock_service.js"></script>
#endif
Run Code Online (Sandbox Code Playgroud)

在上面,必须在调试版本中加载real_service和mock_service.

每个模块都将使用requirejs定义,例如:

//mock_service.js
define('mock_service', [], 
    function () {
        ...
    });

//real_service.js
define('real_service', [], 
    function () {
        ...
    });
Run Code Online (Sandbox Code Playgroud)

然后在使用该服务时,我想检查是否已经定义了mock_service:

//service_user.js
define(['require', 'real_service'], 
    function (require, real_service) {
        if (require.isDefined('mock_service')) { // 'isDefined' is what I wish was available
             var mock = require('mock_service');
             mock.init(real_service);
        }

        ...
    });
Run Code Online (Sandbox Code Playgroud)

所以我的名义'isDefined'函数只会检查一个已定义给定名称(或名称?)的模块.然后在我的代码中,如果它被定义,我可以要求它并使用它.如果没有,那也没关系.

对我来说重要的是没有尝试加载可选模块.我可以尝试/捕获require语句,但这会导致尝试从服务器加载它,我不希望这样.

另一个选择是有一个我总是加载的存根定义,所以总是需要一个模拟,然后我可以询问它是否是真实的,但这似乎也是浪费.

require.js是否有任何一个深入到require.js,他们发现他们需要这个功能并制定了实施策略?

罗先生,提前谢谢你

requirejs

34
推荐指数
2
解决办法
2万
查看次数

有哪些方法可以在ASP.NET MVC中停止多个表单回发?

常见的Web问题是用户多次单击表单的提交按钮,因此服务器不止一次地处理表单.当用户点击已提交表单的后退按钮并因此再次处理时,也会发生这种情况.

什么是阻止ASP.NET MVC发生这种情况的最佳方法?

我认为的可能性是:

  1. 提交后禁用该按钮 - 这会绕过多次点击而不是导航
  2. 让接收操作立即重定向 - 浏览器似乎将这些重定向保留在历史记录之外
  3. 在会话和表单中放置一个唯一的标记 - 如果它们匹配处理表单 - 如果不清除表单以进行新提交

还有更多吗?

是否有任何特定的实现?

我可以看到第三个选项被实现为具有HtmlHelper扩展的ActionFilter,其方式与防伪内容类似.

期待收到MVC'ers的消息.

asp.net-mvc postback submit action-filter

20
推荐指数
2
解决办法
7439
查看次数

如何在.net中获取方法体的哈希值?

我想生成一个方法体或整个类的哈希值,以便将它与之前的哈希值进行比较,从而检测运行时的更改.

我已经看到使用Mono.Cecil在Mono中实现了这一点.

是否可以在Microsoft.NET中执行此操作?如果是这样的话?

或者您使用了哪些其他方法?

背景

我想将我的实体的投影创建为只读的非规范化数据库 - 如果你愿意的话,这是一种本地缓存.

只要实体发生了变化,就会执行执行此操作的转换算法.然后它将采用相关实体并生成投影.但是,在启动时或作为部署的一部分,我想检查转换算法是否已更改,如果是,请删除并重新生成表,然后使用主存储中的所有实体重新填充它.

我已经在Event Source/CQRS博客中看到了这种方法,但如果您有替代/更好的方法来满足此要求,请随时发表评论.

基于Jon Skeet的答案的不完整解决方案

以下LinqPad C#程序试图实现此目的:

void Main()
{
    GetMethodHash(this.GetType(), "DoOriginal").Dump();
    GetMethodHash(this.GetType(), "DoSame").Dump();
    GetMethodHash(this.GetType(), "DoWithConstChange").Dump();
    GetMethodHash(this.GetType(), "DoWithCodeChange").Dump();
}

// Define other methods and classes here

private string DoOriginal(int data)
{
    return string.Format("data = {0}", data);
}

private string DoSame(int data)
{
    return string.Format("data = {0}", data);
}

private string DoWithConstChange(int data)
{
    return string.Format("data : {0}", data);
}

private string DoWithCodeChange(int data)
{
    return string.Format("data = {0} …
Run Code Online (Sandbox Code Playgroud)

.net c#

2
推荐指数
1
解决办法
428
查看次数