1.
使用了$("#form").validate({....})之后form为什么不能提交了?
我不知道为什么,但我知道这样写就可以。在所有的规则都验证通过的情况下,表单即可正常提交。
cshtml代码:
<form action="@Url.Action("Reg", "Register")" method="POST" class="center-block" >
<input type="text" id="username" name="username" /> <pre name="code" class="html"> <input type="submit" value="Submit" /><span style="font-family: Arial, Helvetica, sans-serif;"> </span>
javascript代码:
$("#form").validate({
errorLabelContainer: $("#errorContainer"),
rules: {
//...
},
messages: {
//...
},
submitHandler: function(form) {
form.submit();
}
});
即只要写成这样,当form里的元素的规则都验证通过之后,此form表单则会提交。
即提交到C#后台的Register控制器的Reg函数里去。
当然的,action可以写成你知道的可行的任何形式,写哪就提交到哪去。具体略。
more:
而且此form还可以写的一点内容就是<form ...... onsubmit = "return aaa();">
可以控制form提交之前的一些行为。不过这个写法是另外一个知识点了,在此不展开。
=============================================
2.remote的后台函数究竟该返回什么才行?
后台返回什么好像都没什么用,你true也罢,false也罢,等等好多都不行。
这是为什么?
如下图javascript
$("#form").validate({
rules: {
username: {
required: true,
remote: {
url: "Register/IsAccountExist",
cache: false,
data: {
xAccountCode: function () { return $("#username").val(); }
}
}
}
},
messages: {
username: {
remote: " Username already exists."
},
},
submitHandler: function (form) {
form.submit();
}
});
我期望我验证不通过时,错误提示为“Username already exists”
通过时自然就什么也不提示。
试了很多次,结论是:
后台函数(如此处就是Register/IsAccountExist函数)要返回字符串"true"或者“false”,其他内容是不认的!
就这。
=====
再补充一点:
remote{...}写法并不同于想当然的$.ajax(...)参数写法,不要想当然。
remote里面的remote 里面的type和dataType都不要写,不知道为什么,只知道写了就不行。