ASP.Net MVC中的远程验证3:如何在Action方法中使用AdditionalFields

时间:2011-01-20 21:35:21

标签: asp.net-mvc validation data-annotations

我一直在使用新的ASP.Net MVC 3 RemoteAttribute向具有单个参数的操作方法发送远程调用。现在我想使用AdditionalFields属性传递第二个参数:

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

IntialEmail是视图中的隐藏字段。行动如下:

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

渲染视图时,会填充隐藏字段,但远程触发Action方法时,该值为空字符串。

我在别处见过区分大小写可能是一个问题,所以我确保Action方法对两个参数都有相同的情况。

还有其他建议吗?此AdditionalFields曾被称为Fields。

谢谢,

Beaudetious

3 个答案:

答案 0 :(得分:59)

奇怪。它对我有用:

型号:

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中得到了修复。

答案 1 :(得分:2)

您的隐藏字段必须与您正在验证的字段位于相同的格式内(就像在Darin的示例中一样),否则隐藏字段的值将不会作为参数发送到验证操作方法“public ActionResult IsEmailAvailable(string email) ,string initialEmail)“

答案 2 :(得分:-1)

函数IsEmailAvailable(字符串电子邮件,字符串initialEmail)param电子邮件应该与电子邮件完全相同,属于电子邮件。