ASP.Net MVC 3 проверка на стороне клиента с динамической формой - PullRequest
13 голосов
/ 11 марта 2011

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

ТАКЖЕ Я загружаю свою форму динамически, используя $("#formHolder").load(url);

Когда я загружаю страницу в DIVоно всегда подтверждается как true, хотя мое поле ввода пустое.

т.е. вызов if($("#MyForm").valid()) //is always true

Однако, если я перехожу к URL-адресу страницы, все работает нормально.

Итак, как я могу правильно инициализировать форму после загрузки ее через .load(url);, поскольку она не существует на странице при первом открытии

Мой Javascript

$('.myLink').click(function () {
    var url = '/newsletter/info/'; // this loads my HTML form from another page/view at runtime
    $("#formHolder").load(url, function () {
            $("#MyForm").validate(); // I thought this line would initialise it once it loads
           }).dialog({
        modal: true,
        width:800,
        height: 600
    });
    return false;
});

Ответы [ 3 ]

15 голосов
/ 11 марта 2011

Вызов $.validator.unobtrusive.parse() вручную после загрузки формы работает

Я нашел решение здесь http://btburnett.com/2011/01/mvc-3-unobtrusive-ajax-improvements.html

9 голосов
/ 21 августа 2011

Лучшее решение - вызвать $.validator.unobtrusive.parse('#frmToBeValidated') сразу после загрузки Ajax динамической формы.

8 голосов
/ 11 марта 2011

В вашем вопросе не указано, нужно ли что-то настраивать для проверки формы, поэтому я определенно остановлюсь на ненавязчивой проверке jquery, встроенной в MVC3:

Если это ваша модель:

public class Person
{
    [Required(ErrorMessage = "Email address required")]
    [DataType(DataType.EmailAddress, ErrorMessage = "Please enter valid email address")]
    public string Email { get; set; }
}

этот код формы, по вашему мнению, мгновенно активирует проверку с минимальным количеством настроек:

@model MvcApplication12.Models.Person

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.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 (Ajax.BeginForm(new AjaxOptions())) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Person</legend>

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

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

Если вы хотите больше функциональности при публикации формы, вы можете использовать AjaxOptions:

new AjaxOptions() { UpdateTargetId = "formupdate", 
                    OnSuccess = "javascript:alert('success');", 
                    OnFailure = "javascript:alert('failure');", 
                    OnComplete = "javascript:alert('complete');", 
                    OnBegin = "javascript:alert('begin');" })

Это дает вам полный контроль над пользовательскими действиями при отправке, заполнении, сбое или запуске формы.

Надеюсь, это поможет!

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