我在asp.net mvc3应用程序中遇到客户端验证问题。
我的代码看起来:
function loadEditCategoryDialog(categoryId) {
$.ajax({
url : "/rovastamp3/Admin/CategoryEditDialog",
data : "categoryId="+categoryId,
success : function(data){
$("#popup_dialog").html(data);
$("#popup_dialog").dialog({
modal: true,
draggable: false,
resizable: false,
title: "Upravit kategorii",
width: 600,
height: 500,
});
}
});
}
控制器:
[HttpGet]
public ActionResult CategoryEditDialog(int categoryId)
{
CategoryEditViewModel categoryEditViewModel = new CategoryEditViewModel();
categoryEditViewModel.Category = _postAuctionCategoryRepo.Query()
.SingleOrDefault(x => x.Id == categoryId);
return PartialView(categoryEditViewModel);
}
[HttpPost]
public ActionResult CreateNewCategory(CategoryEditViewModel categoryEditViewModel)
{
if (ModelState.IsValid)
{
return RedirectToAction("Index");
}
return View("CategoryEditDialog", categoryEditViewModel);
}
最后我的部分观点是:
@model Rovastamp.MVC3.ViewModels.AdminController.CategoryEditViewModel
<h2>Upravit kategorii @Model.Category.Name</h2>
@{Html.EnableClientValidation();}
@using (Html.BeginForm("CreateNewCategory", "Admin"))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Objednávkový formulář</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Category.Name)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.Category.Name)
@Html.ValidationMessageFor(model => model.Category.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Category.Position)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.Category.Position)
@Html.ValidationMessageFor(model => model.Category.Position)
</div>
<input type="submit" value="Upravit" class="submit_button" />
</fieldset>
}
在我的web.config中,我启用了UnobtrusiveJavaScript和ClientValidatin应用程序设置。
如果我在jquery ui对话框上点击提交按钮,mvc会在没有客户端验证的情况下完全刷新吗?
问题出在哪里?
感谢您的帮助
编辑:
在我的布局页面中,我包含以下脚本:
编辑2
在我的作品中,我说:
jQuery.validator.unobtrusive.parse('#popup_dialog');
在我调用jquery ui对话框之前,客户端验证工作正常。
答案 0 :(得分:29)
这是因为您正在将一个PartialView加载到已由jquery.validator.unobstrusive库解析的View中。您需要指示库重新解析页面以考虑注入的PartialView验证属性。阅读我的this blog post关于这个问题,希望能回答你的问题。
答案 1 :(得分:3)
除了像这样连接你的提交按钮
$("#SubmitButton").click(function(){
if (!$("#editForm").valid()){
return false;
}
});
你需要具体解析html表单,使用默认构造函数对我不起作用。
$.validator.unobtrusive.parse("#editForm");
我正在试图找出一种方法,这样你就不必在每个表格上连接每个提交按钮,如果我找到方法,我会在这里发帖。
答案 2 :(得分:1)
我在这个问题上努力奋斗, 几个小时后,我得出结论,jQuery在表单元素之外呈现DIALOG HTML元素。 由于jQuery.Validation插件仅在FORM元素中起作用, 有必要返回Form范围内的Dialog,这可以通过以下打开事件处理来完成:
$('#dialogDivId').dialog({
autoOpen: false,
width: 500,
height: 500,
minheight: options.minheight,
minwidth: options.minwidth,
modal:false,
open: function (type, data) {
$(this).appendTo($('form')); // reinsert the dialog to the form
} // And Solve your validation inside Jquery dialog
});
答案 3 :(得分:0)
您是否包含适用于客户端验证的JavaScript文件?
执行提交操作时检查JavaScript控制台,我打赌那里有一个错误,导致JavaScript出错,然后表单的默认提交操作正在进行中。