我正在构建一个 MVC 3 应用程序,它使用标准模型验证属性进行基本客户端和服务器验证。然而,我也有一个位于标题中的表单,并使用 jQuery 验证插件来执行客户端验证。
当我将不显眼的库添加到项目中时,使用验证插件的标题表单无法运行并继续发布。当不包含不显眼的库时,标头验证正常,但模型验证停止。
知道我做错了什么吗?
编辑
基本上我在标题中有一个登录表单。我还有一个登录页面,也允许登录。登录页面与模型相关联,但标题中的表单不是,它只是 html。两种形式都通过 jQuery .ajax 调用相同的控制器/动作。
我失去了使用 .ajax 方法的能力,因为我包含了不显眼的库,所以它似乎没有被调用。
我得到了您包含的代码来工作,但是在验证完成后我仍然无法发布或执行操作。
我的标题形式是:
<form id="frmHeaderLogin" action="">
<table id="LoginBox" title="Login">
<tr>
<td>UserName</td>
<td><input type="text" id="Username" name="Username" /></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" id="Password" name="Password" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Login" id="btnHeaderLogin" name="btnHeaderLogin" /></td>
</tr>
</table>
</form>
我有一个提交按钮的单击事件,它将验证客户端输入,然后在创建 JSON 对象作为数据参数后将其提交给服务器。服务器的响应也是一个 JSON 对象。此表单位于布局文件中,因为它将出现在每一页上。
主登录页面/视图有一个简单的表单,如下所示:
@using (Html.BeginForm("Login", "Account", FormMethod.Post, new { id = "MainLoginForm" }))
{
<div>
<fieldset>
<p style="color:Red;font-size:medium">@ViewData["Message"]</p>
<legend>Login</legend>
<div class="editor-label">
@Html.LabelFor(m => m.UserName, "EmailId")
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.Password, "Password")
</div>
<div class="editor-field">
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<p>
<input type="submit" id="btnMainLogin" value="Login" />
</p>
</fieldset>
</div>
}
这也有一个 jQuery click 事件,它触发 .ajax 方法并将 JSON 对象发布到服务器,如上所述。两个实例都返回一个 JSON 对象。
我想此时的问题可能是,我可以对布局文件中的标题登录使用相同的模型,从而允许我使用客户端和服务器验证吗?
以下是我在验证通过后使用的 submitHandler 的示例(使用 jquery.validate)
$("#formname").validate( {
// .....
// .....
submitHandler: function () {
var JSONData = new Object();
$(':text, :password', $("table[id$='LoginBox']")).each(function () {
JSONData[$(this).attr("id")] = $(this).val();
});
$.ajax({
type: "POST",
url: "/Controller/Action",
data: "{'Login': '" + JSON.stringify(JSONData) + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
var response = $.parseJSON(result);
alert("Header Login Success!");
},
error: function (xhr, status, error) {
alert(xhr.statusText + " - ReadyState:" + xhr.readyState + "\n" + "Status: " + xhr.status);
}
});
}
)};