ASP.NET MVC Remote Attribute не работает в модале начальной загрузки

-2

У меня есть контроллер с CRUD с использованием модов Bootstrap. У меня есть объект Town, и я хочу реализовать свойство TownName уникальным. Поэтому я использую атрибут Remote:

public class Town
{
    ...
    [Required]
    [Remote("IsTownValid", "Town"]         
    public string TownName { get; set; }
    ...
}

В контроллере у меня есть:

public JsonResult IsTownValid(string townName)
{
    return IsTownExist(townName) ? Json(false, JsonRequestBehavior.AllowGet) : Json(true, JsonRequestBehavior.AllowGet);
}

private bool IsTownExist(string townName)
{
    // repository-unitOfWork that get town with specified town name
    var town = repository.TownRepository.Get(filter: t => t.TownName == townName).SingleOrDefault();

    if (String.IsNullOrEmpty(townName))
        return true;
    else if (town != null)
        return true;
    else
        return false; 
}

У меня есть библиотека библиотеки Java JQuery Unobtrusive Validation в представлении _Layout.

Проблема в том, что я начинаю использовать модальный для создания города, модальный игнорировать удаленный атрибут. Таким образом, для целей тестирования я создаю на этом стандарте стандартную версию контроллера и удачную проверку правильности работы. Итак, мой вопрос: почему он не работает в модальном?

Предложения, пожалуйста... Спасибо заранее...

  • 1
    Возможно, потому что модал загружается динамически, а вы не перепроверяли валидатор? Примечание: это может быть просто Json(!IsTownExist(townName), JsonRequestBehavior.AllowGet);
  • 0
    Возможно, вы захотите еще раз взглянуть на логику в IsTownExist() . if (String.IsNullOrEmpty(townName)) { return true; } должно быть перед вызовом базы данных.
Теги:
asp.net-mvc

1 ответ

0
Лучший ответ

Стивен Muecke, спасибо за ответ, потому что они заставляют меня отвечать. Это мой код JavaScript, который активирует модальный. Я комментирую строки, которые я добавляю к коду, которые активируют проверку на стороне клиента в модальном режиме:

$(function () {
    $.ajaxSetup({ cache: false });

    $("a[data-modal]").on("click", function (e) {

        $('#m-town-modal-content').load(this.href, function () {
            // this is the first add
            $.validator.unobtrusive.parse($('form'));

            $('#m-town-modal').modal({
                keyboard: true
            }, 'show');

            bindForm(this);
        });       

        return false;
    });
});

function bindForm(dialog) {
    $('form', dialog).submit(function () {
        // this is the second addition
        if(this.valid()) {
            $.ajax({
                url: this.action,
                type: this.method,
                data: $(this).serialize(),
                success: function (result) {               
                    if (result.success) {
                        $('#m-town-modal').modal('hide');                    
                        location.reload();
                    } else {
                        $('#m-town-modal-content').html(result);
                        bindForm();
                    }
                }
            });
            return false;
        }            
    });
}    

Ещё вопросы

Сообщество Overcoder
Наверх
Меню