none
asp.net mvc数据验证的三个问题 RRS feed

  • 问题

  • 1.在注册页面,因为要牵涉到很多自定义验证,所以打算使用jquery.validate.js,但是发现就算使用这个还是无法屏蔽掉mvc本身的验证,依然会产生诸如
    if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; }
    window.mvcClientValidationMetadata.push({"Fields":[{"FieldName":"UserName","ReplaceValidationMessageContents":false,"ValidationMessageId":"UserName_validationMessage","ValidationRules":[{"ErrorMessage":"请填写您的用户名","ValidationParameters":{},"ValidationType":"required"}]},{"FieldName":"Email","ReplaceValidationMessageContents":false,"ValidationMessageId":"Email_validationMessage","ValidationRules":[{"ErrorMessage":"请填写电子邮件","ValidationParameters":{},"ValidationType":"required"}]},{"FieldName":"Password","ReplaceValidationMessageContents":true,"ValidationMessageId":"Password_validationMessage","ValidationRules":[{"ErrorMessage":"请设置您的密码","ValidationParameters":{},"ValidationType":"required"}]},{"FieldName":"Mobile","ReplaceValidationMessageContents":true,"ValidationMessageId":"Mobile_validationMessage","ValidationRules":[{"ErrorMessage":"请填写手机号码","ValidationParameters":{},"ValidationType":"required"}]},{"FieldName":"ConfirmPassword","ReplaceValidationMessageContents":true,"ValidationMessageId":"ConfirmPassword_validationMessage","ValidationRules":[{"ErrorMessage":"请确认您密码","ValidationParameters":{},"ValidationType":"required"}]}],"FormId":"form0","ReplaceValidationSummary":false});
    //]]>
    </script>
    
    
    
    想屏蔽掉这些代码,但是好象没有想到较好的办法,如果去掉Html.EnableClientValidation(),好象同时不能使用jquery验证 2.有个日期时间型字段,字段是非空型,但有默认值,所以在用户填写的时候也想弄成选填类型,但是不管怎么样,服务器端都会自动验证是否填写,即使去掉对应的Required都不管用,这个问题,当然可以增加一个隐藏文本框来通过js转化,但是觉得毕竟不是好的方法。 3.如果使mvc服务器端的验证配合jquery呢,比如说将错误显示在jquery指定显示错误的地方 上网查了一直没有找到较好的解决方案,不知大家有什么办法呢?或许是mvc本身的bug?
    电子商务人,电子商务路
    2010年8月25日 15:35

答案

  • 你好:

    1.你可以添加ValidateInput(false)。

    [AcceptVerbs(HttpVerbs.Post), ValidateInput(false)]
    public ActionResult CreateTopic([Bind(Include = "Title,CategoryID,TopicContent,Author")]FTopic aTopic){}

    2.从你的描述上看你应该是把用户所填写的数据绑定到数据对象上。而数据对象上有默认的验证,这样就强迫你在服务器端验证了。不然就会出现数据操作失败。这样的话尽量使客户端验证与服务端的内容相同。

    3.你可以尝试使用博客园的注册验证代码,有非常好的提示及报错信息。它们是使用同一个提示位置。

    http://passport.cnblogs.com/register.aspx

    希望对你有所帮助。

    2010年8月26日 6:41
    版主
  • 3.博客园的代码我看过,他的和我目前的状态一样,把javascript,他的服务器端验证也只是出现在提交按钮的旁边


    提示是在相应的输入框右边。一部分是使用javascript验证。一部分是使用ajax服务器端数据验证。我觉得那样的方式正好合适你的需求。
    2010年8月26日 8:37
    版主

全部回复

  • 你好:

    1.你可以添加ValidateInput(false)。

    [AcceptVerbs(HttpVerbs.Post), ValidateInput(false)]
    public ActionResult CreateTopic([Bind(Include = "Title,CategoryID,TopicContent,Author")]FTopic aTopic){}

    2.从你的描述上看你应该是把用户所填写的数据绑定到数据对象上。而数据对象上有默认的验证,这样就强迫你在服务器端验证了。不然就会出现数据操作失败。这样的话尽量使客户端验证与服务端的内容相同。

    3.你可以尝试使用博客园的注册验证代码,有非常好的提示及报错信息。它们是使用同一个提示位置。

    http://passport.cnblogs.com/register.aspx

    希望对你有所帮助。

    2010年8月26日 6:41
    版主
  • 感谢BoberSong<abbr class="affil">版主</abbr>用户奖牌用户奖牌用户奖牌用户奖牌:

    1.ValidateInput(false)是对所有的表单都不进行验证

    2.绑定的对象并没有验证的逻辑

    3.博客园的代码我看过,他的和我目前的状态一样,把javascript,他的服务器端验证也只是出现在提交按钮的旁边

     

     

    1,2两个问题我已经找到比较好的解决方案,现在是第三个还没有更好的方法


    电子商务人,电子商务路
    2010年8月26日 8:24
  • 3.博客园的代码我看过,他的和我目前的状态一样,把javascript,他的服务器端验证也只是出现在提交按钮的旁边


    提示是在相应的输入框右边。一部分是使用javascript验证。一部分是使用ajax服务器端数据验证。我觉得那样的方式正好合适你的需求。
    2010年8月26日 8:37
    版主