Является ли jquery.validate.unobtrusive Bugged? - PullRequest
0 голосов
/ 01 марта 2011

Я пытаюсь заставить мою клиентскую проверку работать при использовании ajax-запроса в диалоговом окне пользовательского интерфейса jquery.

Это означает, что у меня нет кнопки отправки и я не отправляю сообщения назад. Я не мог понять, почему я не мог заставить его работать.

Я отправил этот вопрос . Я поэкспериментировал с этим и пришел к выводу, что по какой-то причине мне нужно загрузить jquery.validate.unobtrusive с моим частичным представлением. Это не имеет смысла для меня.

Это ошибка? <ч /> Редактировать

Я также отправил сообщение об ошибке в asp.net codeplex

Дополнительным преимуществом этого является то, что если вы хотите, вы можете просто загрузить мой маленький пример приложения и попробовать его.

<ч /> Или вы можете выполнить следующие действия

  1. Создать непустое приложение asp.net mvc 3 (я использую бритву)

    _Layout.cshtml

    @ ViewBag.Title

                <script type="text/javascript">
                    $(function ()
                    {
                        $.get('/home/dialog', null, function (r)
                        {
    
                            var a = $("#dialog").dialog({
                                resizable: false,
                                height: 500,
                                modal: true,
                                buttons: {
                                      "Delete all items": function ()
                                    {
                                        $('#testFrm').validate().form();
                                    },
                                    Cancel: function ()
                                    {
                                        $(this).dialog("close");
                                    }
                                }
                            }).html(r);
                        });
    
                        $('#testFrm').live('submit',function (e)
                        {
                            e.preventDefault();
                        });
    
                    });
    
    
                </script>
            </head>
    
            <body>
                <div class="page">
    
                    <div id="header">
                        <div id="title">
                            <h1>My MVC Application</h1>
                        </div>
    
                        <div id="logindisplay">
                            @Html.Partial("_LogOnPartial")
                        </div>
    
                        <div id="menucontainer">
    
                            <ul id="menu">
                                <li>@Html.ActionLink("Home", "Index", "Home")</li>
                                <li>@Html.ActionLink("About", "About", "Home")</li>
                            </ul>
    
                        </div>
                    </div>
    
                    <div id="main">
                        @RenderBody()
                        <div id="footer">
                        </div>
                    </div>
                </div>
            </body>
            </html>
    

    <ч /> ViewUserControl1 (частичный вид) - Stick в папке Home View

    @ model MvcApplication1.Models.TestModel

    @ using (Html.BeginForm ("test", "Account", FormMethod.Post, new {@ id = "testFrm"})) { @ Html.ValidationSummary () @ Html.TextBoxFor (x => x.Name) }

<ч /> Индекс (должен существовать, заменить на этот)

@model MvcApplication1.Models.TestModel


@{
    ViewBag.Title = "Home Page";
}

<h2>@ViewBag.Message</h2>
<p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>

@DateTime.Now

<div id="dialog">
</div>

обратите внимание на идентификатор диалога, в котором будет храниться запрос ajax частичного представления

<ч /> Домашний контроллер

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class HomeController : Controller
    {

        public ActionResult test()
        {
            return null;
        }

        public PartialViewResult Dialog()
        {
            return PartialView("ViewUserControl1");
        }


        public ActionResult Index()
        {
            ViewBag.Message = "Welcome to ASP.NET MVC!";

            return View();
        }




        public ActionResult About()
        {
            return View();
        }
    }
}

<ч /> TestModel.cs // просмотр модели

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;

namespace MvcApplication1.Models
{
    public class TestModel
    {
        [Required()]
        public string Name { get; set; }
    }
}

<ч /> web.config

 <appSettings>
    <add key="webpages:Enabled" value="false" />
      <add key="ClientValidationEnabled" value="true" />
      <add key="UnobtrusiveJavaScriptEnabled" value="true" />  
  </appSettings>

Теперь запустите приложение. Нажмите «Удалить все элементы» и «Отправить запрос».

Ничего не должно случиться. Для меня не появляется подтверждение.

Теперь перейдите и добавьте эту строку в частичное представление (ViewUserControl1)

<ч />
<script src="../../Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>


@model MvcApplication1.Models.TestModel

@using (Html.BeginForm("test","Account",FormMethod.Post,new {@id="testFrm"}))
{
     @Html.ValidationSummary()
     @Html.TextBoxFor(x => x.Name)
     <input type="submit" />
}

Теперь попробуйте еще раз.

Теперь должны появиться ошибки проверки.

Ответы [ 2 ]

0 голосов
/ 01 марта 2011

Это не ошибка.Когда вы загружаете PartialView с помощью Ajax, вы должны затем проанализировать ненавязчивые атрибуты проверки, включенные в новые элементы, которые вы загружаете.

0 голосов
/ 01 марта 2011

Я думаю, что нашел какую-то работу вокруг. Несмотря на то, что я считаю, что нужно сделать автоматический способ для чего-то такого базового, как проверка работоспособности с частичными представлениями

Работа вокруг

...