【问题标题】:Remote Validation in ASP.Net MVC 3: How to use AdditionalFields in Action MethodASP.Net MVC 3 中的远程验证:如何在 Action 方法中使用 AdditionalFields
【发布时间】:2013-09-08 09:58:54
【问题描述】:

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

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

IntialEmail 是视图中的隐藏字段。动作如下所示:

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

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

我在其他地方看到过区分大小写可能是个问题,因此我确保 Action 方法对两个参数都有相同的大小写。

还有其他建议吗?这个 AdditionalFields 曾经被称为 Fields。

谢谢,

美丽

【问题讨论】:

  • 您可以添加视图的标记吗?附加字段需要与您视图中的字段之一匹配。您是否得到电子邮件的值,但 InitialEmail 的字符串为空?要进行调查,使用 firebug 进行调试很有帮助,您可以看到发送回服务器的请求。它应该具有您的操作所期望的字段的查询字符串。类似 ?email=blah?InitialEmail=blah...
  • 我的另一个问题的答案也解决了这个问题:stackoverflow.com/questions/4696276/… 那么我应该如何标记这个问题已回答?

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


【解决方案1】:

奇怪。它对我有用:

型号:

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

【讨论】:

  • 达林:你和你的“它对我有用”总有一天会成为我的死。 ;)
  • 说真的,将 IsEmailAvailable 方法中 InitialEmail 的值打印到输出窗口。你会看到它是空白的。我可以触发远程方法,但附加参数没有值。
  • 我不知道有什么不同。
  • 我找到了。您必须在控制器中设置此属性[OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
  • @Pittfall 重写 RemoteValidation 实现:P
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    function IsEmailAvailable(string email, string initialEmail) param email应该是Email,和Property Email完全一样。

    【讨论】:

    • 大小写无关。 MVC 框架映射它不区分大小写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多