Показать результат RemoteAttribute в MVC 3.0 - PullRequest
1 голос
/ 25 февраля 2011

У меня есть настройка ViewModel для использования RemoteValidation с использованием RemoteAttribute.Это работает нормально.

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

Обновил его немного, чтобы показать какой-то фиксированный код.

Я хочу отметить, что это не мой фактический "Регистр"код.Это тестирование, чтобы я мог использовать его в других ситуациях.У меня нет регистрации пользователей с использованием плоских имен!

Вот библиотеки, на которые я ссылаюсь, и как я на них ссылаюсь.

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.10/jquery-ui.js"></script>

<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.unobtrusive-ajax.min.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js"></script>

Вот как я подключаюRemoteAttribute.

public class UserRegistrationModel
{
    [Required]
    [RegularExpression(@"^(?:[a-zA-Z\p{L} \.'\-]{3,48})$", ErrorMessage = "This name contains invalid characters. Names must be between 3 and 48 characters, contain only standard unicode symbols, and may not contain any punctuation other than the ['] and [-] symbols.")]
    [Remote("ValidateUserName", "Membership", ErrorMessage = "{0} is invalid.")]
    public string Name
    {
        get;
        set;
    }
}

А теперь вот фактическое поведение контроллера.

    public ActionResult ValidateUserName(string name)
    {
        // perform logic

        if (true)
            return Json(true, JsonRequestBehavior.AllowGet);

        return Json(false, JsonRequestBehavior.AllowGet);
    }

Я проверил свой HTML, и он работает так, как я хочу.Но я не понимаю, что делать оттуда.Как я могу показать эту информацию пользователю?Он просто сохраняет его в html

data-val-remote="* is invalid"

, который я наблюдал, и я замечаю, что даже когда RemoteAttribute возвращает false, html изменяется с

*С 1029 * до value class="valid", но в других моих проверках модели это изменяется на `class =" input-validation-error "'.

Так есть ли у кого-нибудь какие-нибудь подсказки о том, как отрисовать удаленное сообщение обратно?Или я действительно ничего не могу сделать?

1 Ответ

4 голосов
/ 28 февраля 2011

Для меня нормально работает:

public class UserRegistrationViewModel
{
    [Required]
    [RegularExpression(@"^(?:[a-zA-Z\p{L} \.'\-]{3,48})$", ErrorMessage = "This name contains invalid characters. Names must be between 3 and 48 characters, contain only standard unicode symbols, and may not contain any punctuation other than the ['] and [-] symbols.")]
    [Remote("ValidateUniqueName", "Home")]
    public string Name { get; set; }
}

Контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new UserRegistrationViewModel());
    }

    public ActionResult ValidateUniqueName(string Name)
    {
        if (NameIsValid(Name)) 
        {
            return Json(true, JsonRequestBehavior.AllowGet);
        }

        return Json(string.Format("{0} is invalid", Name), JsonRequestBehavior.AllowGet);
    }
}

Просмотр:

@model AppName.Models.UserRegistrationViewModel

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

@using (Html.BeginForm())
{
    @Html.TextBoxFor(x => x.Name)
    @Html.ValidationMessageFor(x => x.Name)
    <input type="submit" value="OK" />
}

Вы также можете найти следующийсообщение в блоге полезно.

...