Показать пользовательское сообщение для ответа об удаленной проверке - PullRequest
4 голосов
/ 21 июня 2011

Я использую удаленную проверку для проверки доступности имени пользователя при регистрации для моего приложения asp.net mvc 3 (C #).

Я использую проверку удаленного атрибута MVC как:

[Remote("IsUserNameAvailable", "User")]
public string UserName { get; set; }

Мне нужно показать сообщение при двух условиях:

  1. Показать сообщение об ошибке «Имя пользователя не доступно» - Условие отказа
  2. Показать сообщение об успехе «Имя пользователя доступно» - Условие успеха

Я могу показать сообщение условия отказа без каких-либо проблем, например:

return Json("Username not available", JsonRequestBehavior.AllowGet);

Но для условия успеха мне нужно отправить true в ответе (не с пользовательским сообщением) как:

 return Json(true, JsonRequestBehavior.AllowGet);

Как показать пользовательское сообщение для условия успешного удаленного подтверждения?

Ответы [ 2 ]

2 голосов
/ 23 мая 2012

см. Эту ссылку ... здесь

Одним из способов достижения этого является добавление настраиваемого заголовка ответа HTTP из действия проверки:

public ActionResult IsUserNameAvailable(string username)
{
if (IsValid(username))
{
    // add the id that you want to communicate to the client
    // in case of validation success as a custom HTTP header
    Response.AddHeader("X-ID", "123");
    return Json(true, JsonRequestBehavior.AllowGet);
}

return Json("The username is invalid", JsonRequestBehavior.AllowGet);
}

Сейчасна клиенте у нас, очевидно, есть стандартная форма и поле ввода для имени пользователя:

@model MyViewModel
@using (Html.BeginForm())
{
    @Html.EditorFor(x => x.UserName)
    @Html.ValidationMessageFor(x => x.UserName)
    <button type="submit">OK</button>
}

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

$(function () {
$('#UserName').rules().remote.complete = function (xhr) {
    if (xhr.status == 200 && xhr.responseText === 'true') {
        // validation succeeded => we fetch the id that
        // was sent from the server
        var id = xhr.getResponseHeader('X-ID');

        // and of course we do something useful with this id
        alert(id);
    }
};
});
0 голосов
/ 21 июня 2011

Можете ли вы вернуть объект (который будет сериализован в Json)?

Например:

var answer = new { success = true, message = "Username available" };
return Json(answer, JsonRequestBehavior.AllowGet);

Затем вы можете разобрать это в представлении.

Кроме того, если вы делаете это таким образом, но имя пользователя НЕ доступно, вы также можете добавить несколько предложенных имен пользователей.

например,

// pretend they chose "dave"
List<string> alternativeNames = new List<string>() { "dave1", "dave2" };
var answer = new { success = false, message = "Username not available", alternatives = alternativeNames };
return Json(answer, JsonRequestBehavior.AllowGet);
...