Удаленная проверка в ASP.Net MVC 3: как использовать дополнительные поля в методе действия - PullRequest
30 голосов
/ 21 января 2011

Я использую новый ASP.Net MVC 3 RemoteAttribute для отправки удаленного вызова методу действия, у которого был один параметр. Теперь я хочу передать второй параметр, используя свойство AdditionalFields:

[Remote("IsEmailAvailable", "Users", AdditionalFields = "InitialEmail")]

Где IntialEmail - скрытое поле в представлении. Действие выглядит так:

public JsonResult IsEmailAvailable(
            string email,
            string InitialEmail)
{
//etc.
}

При отображении представления скрытое поле заполняется, но когда метод Action запускается удаленно, значением является пустая строка.

Я видел, что в других местах чувствительность к регистру может быть проблемой, поэтому я убедился, что метод Action имеет одинаковый регистр для обоих параметров.

Есть еще предложения? Эти дополнительные поля раньше назывались полями.

Спасибо

Beaudetious

Ответы [ 3 ]

59 голосов
/ 21 января 2011

Странно.Это работает для меня:

Модель:

public class MyViewModel
{
    [Required]
    [Remote("IsEmailAvailable", "Home", AdditionalFields = "InitialEmail")]
    public string Email { get; set; }
}

Контроллер:

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

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

    public ActionResult IsEmailAvailable(string email, string initialEmail)
    {
        return Json(false, JsonRequestBehavior.AllowGet);
    }
}

Вид:

@model AppName.Models.MyViewModel
@{
    ViewBag.Title = "Home Page";
}
<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.Email)
    @Html.ValidationMessageFor(x => x.Email)
    <input type="hidden" name="InitialEmail" value="foo@bar.com" />
    <input type="submit" value="OK" />
}

IIRC была некоторая ошибка вASP.NET MVC 3 RC2 с этой удаленной проверкой, исправленной в RTM.

2 голосов
/ 13 августа 2013

Ваше скрытое поле должно быть внутри той же формы, что и поле, которое вы проверяете (как в примере с Дарином), иначе значение скрытого поля не будет отправлено в качестве параметра в метод действия проверки "public ActionResult IsEmailAvailable (string email , строка initialEmail) "

0 голосов
/ 08 сентября 2013

function IsEmailAvailable (string email, string initialEmail) в параметре email должен указываться как Email, который в точности совпадает с Email свойства.

...