MVC3 jQuery.validate не работает при отправке формы - PullRequest
1 голос
/ 23 сентября 2011

Я работал в MVC3, используя встроенную проверку jquery.

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

Нижемои сценарии включения:

<script src="@Url.Content("~/Scripts/jquery-1.6.2.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

Мне удалось это исправить, вернув версию jquery в jquery-1.4.4.min.js, поэтому мне просто интересно:

НеJQuery обратно совместимы?Кроме того - почему проверка на самом деле работает, но просто терпит неудачу при отправке ввода?

Может ли это быть ошибкой в ​​новой версии jQuery?

Ответы [ 3 ]

2 голосов
/ 09 ноября 2011

Сначала мне казалось, что jQuery 1.6 нарушит совместимость. Оказалось, что сделать ненавязчивую проверку работоспособнее было немного сложнее, чем я думал. Это хороший учебник, который даст вам рабочий пример:

http://www.asp.net/mvc/tutorials/creating-a-mvc-3-application-with-razor-and-unobtrusive-javascript

Затем вы можете переключиться на jquery 1.6.2 и увидеть, что он все еще работает. Для меня то, чего не хватало в моем почти идентичном представлении, было Html.BeginForm. Как только я добавил это, все начало работать.

1 голос
/ 22 ноября 2011

Я думаю, что это ошибка, и нет решения для этого.

0 голосов
/ 23 сентября 2011

Форма публикации?Если нет, возможно, у вас нарушено правило проверки, но вы можете не увидеть сообщение об ошибке, если у вас не включены Html.ValidationSummary или Html.ValidationMessageFor.

** РЕДАКТИРОВАТЬ:

Я пробовал с последней версией jQuery (1.6.4) и с 1.6.2 с этим кодом без проблем.

код контроллера

public class TestViewModel
{
    [Required]
    public string textTest { get; set; }

[Required]
public int intTest { get; set; }
}

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new TestViewModel());
    }
[HttpPost]
public ActionResult Index(TestViewModel model)
{
    if (ModelState.IsValid)
    {
        return Redirect("http://www.yahoo.com");
    }
    return View(model);
}

}

разметка

@model MvcApplication39.Controllers.TestViewModel

@{
    ViewBag.Title = "Index";
}

<h2>ViewBag.Title</h2>

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.2.min.js" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>TestViewModel</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.textTest)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.textTest)
            @Html.ValidationMessageFor(model => model.textTest)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.intTest)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.intTest)
            @Html.ValidationMessageFor(model => model.intTest)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...