ASP.NET MVC 3 Удаленная проверка - PullRequest
15 голосов
/ 13 марта 2011

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

    [Remote("IsValidUserName", "Validation", "", ErrorMessage = "Invalid username")]

Но когда это отображаетсяпроверка выполняется против действия «IsValidUserName» контроллера «Проверка» в той же области, что и страница, а не в корневой области ...

data-val-remote-url = "/ Members /Validation / IsValidUserName "

Любая помощь будет оценена.

Спасибо.

Ответы [ 2 ]

31 голосов
/ 13 марта 2011

К сожалению, вот как этот атрибут реализован.Вот выдержка из конструктора этого атрибута:

public RemoteAttribute(string action, string controller, string areaName) : this()
{
    if (string.IsNullOrWhiteSpace(action))
    {
        throw new ArgumentException(MvcResources.Common_NullOrEmpty, "action");
    }
    if (string.IsNullOrWhiteSpace(controller))
    {
        throw new ArgumentException(MvcResources.Common_NullOrEmpty, "controller");
    }
    this.RouteData["controller"] = controller;
    this.RouteData["action"] = action;
    if (!string.IsNullOrWhiteSpace(areaName))
    {
        this.RouteData["area"] = areaName;
    }
}

Обратите внимание на IsNullOrWhiteSpace тест против areaName в конце, который убивает все?

Вы можете исправить это, написавнастраиваемый удаленный атрибут:

public class MyRemoteAttribute : RemoteAttribute
{
    public MyRemoteAttribute(string action, string controller, string area)
        : base(action, controller, area)
    {
        this.RouteData["area"] = area;
    }
}

, а затем:

[MyRemote("IsValidUserName", "Validation", "", ErrorMessage = "Invalid username")]
public string Username { get; set; }

Теперь будет сгенерирован правильный data-val-remote-url="/Validation/IsValidUserName".

9 голосов
/ 01 июня 2015

Я столкнулся с той же проблемой и нашел решение, которое работает для меня.Удаленный атрибут принимает перечисление AreaReference.

System.Web.Mvc.AreaReference - это ENUM с двумя значениями UseRoot & UseCurrent. Более подробная информация найдена здесь

Пример использования, которыйу меня работает:

[Remote("IsValidUserName", "Validation", System.Web.Mvc.AreaReference.UseRoot, ErrorMessage = "Invalid username")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...