如何解决部分视图中的客户端验证不打扰
| 我有一个局部视图,它在jQuery UI对话框中呈现。因为它是动态内容,所以毫不费力的客户端验证将无法进行。为了获得它,我不得不强制验证器解析表单的内容,称为“ 0”。但这是行不通的。我的浏览器报告未干扰的对象未定义。 为什么会这样呢?也许jQuery库中进行了一些更改,但现在整个工作方式有所不同。我正在使用jquery-1.6解决方法
您可能会发现以下博客文章很有用。
,
(function($){
CampusCommon.register(\"Campus.UI.Popup\")
Campus.UI.Popup=function(){
defaults={
action:\'\',ispartialaction:\'\',customcallback:\'\',confirmaction:\'\',controltoupdateid:\'\',width:500,title:\'\',onsubmit:function(id){
var popupid=id+\"_popupholder\";
if(this.ispartialaction){
$.ajax({
url:this.action,type:\"Get\",context: this,data:$(this).find(\"form\").serialize(),success:function(data){
$(\'#\'+id).parents(\'body\').find(\'form\').append(\"<div id=\'\"+popupid+\"\'></div>\");
var ajaxContext=this;
$(\"#\"+popupid).dialog({
autoopen:false,model:true,width:this.width,title:this.title,buttons:{
\"Confirm\":function(){
if(ajaxContext.customcallback==\'\'){
var popupform=$(this).find(\"form\");
if(popupform.valid()){
$.post(ajaxContext.confirmaction,popupform.serialize(),function(d){
if(d!=\'\')
{
$.each(d,function(i,j){
switch(j.Operation)
{
case 1:
if($(\'#\'+j.ControlClientID).is(\"select\"))
{
$(\'#\'+j.ControlClientID).val(j.Value);
$(\'#\'+j.ControlClientID).change();
}
else if($(\'input[name=\"\'+j.ControlClientID+\'\"]\').length>0)
{
$(\'input[name=\"\'+j.ControlClientID+\'\"][value=\"\'+j.Value+\'\"]\').prop(\"checked\",true);
}
break;
case 2:
if($(\'#\'+j.ControlClientID).is(\"select\"))
{
$(\'#\'+j.ControlClientID).append(\"<option selected=\'selected\' value=\\\"\"+j.Value+\"\\\">\"+j.Text+\"</option>\");
}
else
{
var len=$(\'input[name=\"\'+j.ControlClientID+\'\"]\').length;
$(\'#\'+j.ControlClientID+\"list\").append(\'<li><input type=\"checkbox\" name=\"\'+j.ControlClientID+\'\" value=\"\'+j.Value+\'\" id=\"ae\'+j.ControlClientID+len+\'\"/><label for \"ae\'+j.ControlClientID+len+\'\">\'+j.Text+\'</label>\');
}
break;
case 0:
$(\'#\'+j.ControlClientID).val(j.Value);
breakl
default:break;
}
});
popupform.parent().dialog(\"destroy\").remove();
$(\"#\"+ajaxContext.controltoupdateid).change();
}
});
}
}
else
{
executeByFunctionName(ajaxContext.customcallback,window,new Array());
}
},\"Cancel\":function(){
$(this).dialog(\"close\");
}
}
});
$(\"#\"+popupid).dialog(\"open\");
$(\"#\"+popupid).empty().append(data);
},error:function(e)
{
alert(e);
}
});
}
else
{
var frm=document.createElement(\"form\");
frm.id=\"CampusForm\";
frm.name=\"CampusForm\";
frm.action=this.action;
frm.method=\"post\";
var arr=$($(\"#\"+id).closest(\"body\").find(\"form\")).serializeArray();
$.each(arr,j){
var hidd=document.createElement(\"input\");
hidd.type=\"hidden\";
hidd.name=j.name;
hidd.value=j.value;
frm.appendChild(hidd);});
document.appendChild(frm);
frm.submit();
}
}
},clicksubmit=function(){
var opts=$(this).data(\"CampusPopup\");
opts.onsubmit($(this).attr(\"id\"));
return false;
};
return {
init:function(opt){
var opts=$.extend({},defaults,opt||{});
$(this).data(\'CampusPopup\',opts);
$(this).bind(\"click\",clicksubmit);
}};
}();
$.fn.extend({CampusPopup:Campus.UI.Popup.init});
})(jQuery)
/*js*/
1.7.1,1.5.1,validate,unobtrusive,8.20,common,popup.js
[HttpGet]
public ActionResult AddCourse(ViewModel.Batch batch)
{
return PartialView(\"~/Views/Admin/Course.cshtml\",new ViewModel.Course());
}
/*Layout*/
<script src=\"@Url.Content(\"~/Scripts/jquery-1.5.1.min.js\")\" type=\"text/javascript\"></script>
<script src=\"@Url.Content(\"~/Scripts/jquery-1.7.1.min.js\")\" type=\"text/javascript\"></script>
<script src=\"@Url.Content(\"~/Scripts/campuscommon.js\")\" type=\"text/javascript\"></script>
<script src=\"@Url.Content(\"~/Scripts/campus.ui.popup.js\")\" type=\"text/javascript\"></script>
<script src=\"@Url.Content(\"~/Scripts/jquery.validate.js\")\" type=\"text/javascript\"></script>
<script src=\"@Url.Content(\"~/Scripts/jquery.validate.js\")\" type=\"text/javascript\"></script>
<script src=\"@Url.Content(\"~/Scripts/jquery.validate.unobtrusive.js\")\" type=\"text/javascript\"></script>
/*Batch*/
@model Campus.UI.Admin.Models.Batch
@{
ViewBag.Title = \"Batch\";
}
<h2>Batch</h2>
@using (Html.BeginForm(Model.SubmitAction,Model.SubmitController)) {
ViewContext.FormContext.ValidationSummaryId = \"valSumId\";
@Html.ValidationSummary(false,\"Please fix these errors.\",new Dictionary<string,object> { { \"id\",\"valSumId\" } });
<fieldset>
<legend>Batch</legend>
<div class=\"editor-label\">
@Html.LabelFor(model => model.BatchName)
</div>
<div class=\"editor-field\">
@Html.EditorFor(model => model.BatchName)
</div>
<div class=\"editor-label\">
@Html.LabelFor(model => model.Courses)
</div>
<div class=\"editor-field\">
@Html.DropDownListFor(model => model.CourseId,Model.Courses,\"--Select a course\")
</div>
<div class=\"editor-label\">
@Html.LabelFor(model => model.BatchDescription)
</div>
<div class=\"editor-field\">
@Html.EditorFor(model => model.BatchDescription)
</div>
<p>
<input type=\"submit\" value=\"Create\" />
</p>
</fieldset>
}
@section Scripts {
@Scripts.Render(\"~/bundles/jqueryval\")
@Scripts.Render(\"~/bundles/jqueryui\")
@Styles.Render(\"~/Content/themes/base/css\")
}
/*Course*/
@model Campus.UI.Admin.Models.Course
@{
ViewBag.Title = \"Course\";
}
<h2>Course</h2>
@using (Html.BeginForm()) {
ViewContext.FormContext.ValidationSummaryId = \"valSumId\";
@Html.ValidationSummary(false,\"valSumId\" } });
<fieldset>
<legend>Course</legend>
<div class=\"editor-label\">
@Html.LabelFor(model => model.CourseName)
</div>
<div class=\"editor-field\">
@Html.EditorFor(model => model.CourseName)
</div>
<div class=\"editor-label\">
@Html.LabelFor(model => model.CourseDescription)
</div>
<div class=\"editor-field\">
@Html.EditorFor(model => model.CourseDescription)
</div>
<p>
<input type=\"submit\" value=\"Create\" />
</p>
</fieldset>
}
<div>
@Html.ActionLink(\"Back to List\",\"Index\")
</div>
@section Scripts {
@Scripts.Render(\"~/bundles/jqueryval\")
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。