ненавязчивая проверка клиента в частичных представлениях

#jquery #asp.net-mvc-3 #unobtrusive-validation

#jquery #asp.net-mvc-3 #ненавязчивая проверка

Вопрос:

У меня есть частичное представление, которое отображается в диалоговом окне пользовательского интерфейса jQuery. Поскольку это динамический контент, ненавязчивая проверка на стороне клиента не будет работать. Чтобы получить это, я должен заставить валидатор проанализировать вызов содержимого формы $.validator.unobtrusive.parse(); . Но это не работает. Мой браузер сообщает, что ненавязчивый объект не определен. Почему это происходит? Возможно, были некоторые изменения в библиотеке jQuery, и теперь все работает по-другому. Я использую jquery-1.6

Ответ №1:

Следующий пост в блоге может оказаться для вас полезным.

Комментарии:

1. Ну, я пытаюсь сделать именно это

2. @Agzam, и это не работает? Хм, странно. У меня работает. Вы включили надлежащие скрипты ( jquery.validate.js и jquery.validate.unobtrusive.js )?

3. Я использую их в таком порядке: jquery-1.6.min.js jquery-ui-1.8.12.custom.min.js jquery.validate.min.js jquery.validate.unobtrusive.min.js jquery.dynamic.unobtrusive.validation.js

4. Значение $.validator.unobtrusive не определено

5. @Agzam У меня тоже возникла эта проблема, и я только что обновил свои элементы управления Telerik. Вы это исправили?

Ответ №2:

     (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,function(i,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, "Please fix these errors.", new Dictionary<string, object> { { "id", "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")
}