asp.net mvc 3 Проблема удаленной проверки - PullRequest
0 голосов
/ 06 апреля 2011

Это моя модель:

    [Required(ErrorMessage = "Email required!")]
    [Remote("EmailExists","User",ErrorMessage = "Email already")]
    public virtual string Email { get; set; }

Просмотр:

    @Html.TextBoxFor(x => x.Email)
    @Html.ValidationMessageFor(x => x.Email)

Контроллер:

    public ActionResult EmailExists(string Email)
    {
         return Json(!Email.Equals("teste@gmail.com"), 
                                      JsonRequestBehavior.AllowGet);
    }

jquery.validate.min.js и jquery.validate.unobtrusive.min.js добавлены. И web.config также настроен.

Когда я печатаю по электронной почте, она срабатывает EmailExists нормально. Возвращает также true / false. Но он никогда не показывает сообщение об ошибке

И я получаю эту ошибку:

 Erro: uncaught exception: 
 [Exception... "Cannot modify properties of a WrappedNative"
 nsresult: "0x80570034 (NS_ERROR_XPC_CANT_MODIFY_PROP_ON_WN)"  
 location: "JS frame :: chrome://global/content/bindings/autocomplete.xml ::
 onxblpopuphiding :: line 848"  data: no]

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

В вашем описании нет ничего, что предполагало бы проблему.Я создал новое приложение ASP.NET MVC 3 с использованием шаблона по умолчанию, добавил модель:

public class MyViewModel
{
    [Required(ErrorMessage = "Email required!")]
    [Remote("EmailExists", "Home", ErrorMessage = "Email already")]
    public string Email { get; set; }
}

обновил HomeController:

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

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }

    public ActionResult EmailExists(string Email)
    {
        return Json(
            !Email.Equals("teste@gmail.com"), 
            JsonRequestBehavior.AllowGet
        );
    }
}

и ~/Views/Home/Index.cshtmlview:

@model AppName.Models.MyViewModel
<script type="text/javascript" src="@Url.Content("~/scripts/jquery.validate.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/scripts/jquery.validate.unobtrusive.min.js")"></script>
@using (Html.BeginForm())
{
    @Html.LabelFor(x => x.Email)
    @Html.TextBoxFor(x => x.Email)
    @Html.ValidationMessageFor(x => x.Email)
    <input type="submit" value="OK" />
}

Проверка запускается нормально и отображаются правильные сообщения об ошибках (протестировано с Chrome 10.0, IE9 и FireFox 4.0).Итак, теперь вопрос в том, чем ваш сценарий отличается от этого?

0 голосов
/ 03 мая 2011

Вам просто нужно сделать это:

    [Required(ErrorMessage = "Email required!")]
    [Remote("EmailExists","User")]
    public virtual string Email { get; set; }

и

    public JsonResult EmailExists(string Email)
    {
        string errorMessage = "Email already";
        if (!Email.Equals("teste@gmail.com"))
            return Json(true, JsonRequestBehavior.AllowGet);

        return Json(errorMessage, JsonRequestBehavior.AllowGet);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...