2011-01-20 21 views
30

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

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

其中IntialEmail是视图中的隐藏字段。该动作看起来像这样:

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

当视图显示,隐藏字段被填充,但是当操作方法是远程触发,则该值为空字符串。

我在其他地方见过大小写敏感可能是一个问题,所以我确保Action方法对于这两个参数都有相同的大小写。

其他建议?这个AdditionalFields过去被称为Fields。

感谢,

Beaudetious

+0

您可以添加视图的标记吗?其他字段需要与视图中的某个字段相匹配。您是否获得了电子邮件的价值,但为InitialEmail提供了空字符串?调查它是有益的调试与萤火虫,你可以看到发送回服务器的请求。它应该有一个查询字符串,您的行动预计。就像?email = blah?InitialEmail = blah ... – 2011-01-22 01:21:23

+0

我的另一个问题的答案也解决了这个问题:http://stackoverflow.com/questions/4696276/client-side-validation-not-firing-for -compatialtribute-dataannotation那么我应该如何回答这个问题呢? – beaudetious 2011-01-31 17:50:20

回答

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="[email protected]" /> 
    <input type="submit" value="OK" /> 
} 

IIRC有在ASP.NET MVC 3 RC2一些bug与此远程验证已在RTM中修复。

+6

Darin:你和你的“它对我有用”有一天会成为我的死亡。 ;) – beaudetious 2011-01-21 18:58:22

2

您的隐藏字段必须与您正在验证的字段(如Darin的示例中)相同,否则隐藏字段的值将不会作为参数发送给验证操作方法“public ActionResult IsEmailAvailable(string电子邮件,字符串初始电子邮件)“

-1

函数IsEmailAvailable(字符串电子邮件,字符串initialEmail)参数电子邮件应该作为电子邮件,完全相同的物业电子邮件。