【问题标题】:MVC3 Remote validation, validation fires, method is called but the parameter is nullMVC3远程验证,验证触发,方法被调用但参数为空
【发布时间】:2012-04-30 21:49:05
【问题描述】:

我有以下代码:

    <td colspan="5" align="left" valign="top">
        <div style="position:absolute;" >@Html.TextBoxFor(a => a.Item1.Username, new { @class = "textboxLarge" })
         @Html.ValidationMessageFor(a => a.Item1.Username)</div>
    </td>

还有:

    public JsonResult IsUserNameAvailable(string Username)
    {
        var users = _userService.GetAll();
        var userNames = (from u in users
                        select u.Username).ToList();
        if (userNames.Contains(Username))
        {
            var referrer = Request.UrlReferrer.AbsolutePath;
            List<string> pagesToValidate = new List<string>() { "Registro" };
            var jsonRequestBehavior = JsonRequestBehavior.DenyGet;
            foreach (string page in pagesToValidate)
            {
                if (referrer.Contains(page))
                    jsonRequestBehavior = JsonRequestBehavior.AllowGet;
            }
            return Json("El nombre de usuario ya existe.", jsonRequestBehavior);
        }
        return Json(true, JsonRequestBehavior.AllowGet);
    }

基本上,用户名字段调用 IsUsernameAvailable 方法。验证触发并调用该方法,但变量“用户名”每次都有一个空值,因此验证始终为真。 有什么想法吗?

编辑: 这是用户名字段

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Username", DbType="NVarChar(50) NOT NULL", CanBeNull=false)]
    [Required(ErrorMessage="El nombre de usuario es requerido.")]
    [Remote("IsUserNameAvailable", "Validation")]
    public string Username
    {
        get
        {
            return this._Username;
        }
        set
        {
            if ((this._Username != value))
            {
                this.OnUsernameChanging(value);
                this.SendPropertyChanging();
                this._Username = value;
                this.SendPropertyChanged("Username");
                this.OnUsernameChanged();
            }
        }
    }

【问题讨论】:

    标签: c# ajax asp.net-mvc-3 validation


    【解决方案1】:

    您是否尝试指定前缀:

    public ActionResult IsUserNameAvailable([Bind(Prefix="Item1")] string username)
    {
        ...
    }
    

    【讨论】:

    • 达林,谢谢你的回答。但是不,参数“用户名”仍然为空,我也尝试使用 ActionResult 而不是 JsonResult..no dice。
    • 你的模型是什么样子的?你能提供一个简单明了的例子来重现问题吗?
    • 达林,我已经编辑了我的回复以包含用户名字段和验证声明。
    • AJAX 请求呢?例如,您认为在 FireBug 中发送的具体价值是什么?
    • Darin,这就是萤火虫告诉我的:Item1.Username Benjamin 它正在发送 Item1.Username 参数值,即 Benjamin 所以显然它正确地发送了这一侧的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 2017-04-09
    • 2012-04-09
    • 2011-10-07
    • 1970-01-01
    相关资源
    最近更新 更多