想象这样的情况:远程验证似乎马车
的SetUp
在默认的MVC3项目,在AccountModels.cs
public class GlobalAccount
{
public GlobalAccount()
{
this.LogOn = new LogOnModel();
this.Register = new RegisterModel();
}
public LogOnModel LogOn { get; set; }
public RegisterModel Register { get; set; }
}
创建一个新的复杂类型在RegisterModel
变化UserName
到:
[Required]
[Remote("UserNameExists", "Validation", "", ErrorMessage = "Username is already taken.")]
[RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed.")]
[Display(Name = "Username (spaces will be stripped, must be at least 6 characters long)")]
public string UserName { get; set; }
在Validation
控制器方法如下:
public class ValidationController : Controller
{
public JsonResult UserNameExists(string UserName)
{
string user = null;
if (!String.IsNullOrWhiteSpace(UserName) && UserName.Length >= 6)
user = UserName == "abcdef" ? "ok" : null;
return user == null ?
Json(true, JsonRequestBehavior.AllowGet) :
Json(string.Format("{0} is not available.", UserName), JsonRequestBehavior.AllowGet);
}
}
现在在注册查看,使用GlobalAccount
模式,而不是RegisterModel
的用户名输入框会像:
@model Your.NameSpace.Models.GlobalAccount
和
<div class="field fade-label">
@Html.LabelFor(model => model.Register.UserName, new { @class = "text" })
@Html.TextBoxFor(model => model.Register.UserName, new { spellcheck = "false", size = "30" })
</div>
这将导致这样的事情,在HTML
<div class="field fade-label">
<label class="text" for="Register_UserName"><span>Username (spaces will be stripped, must be at least 6 characters long)</span></label>
<input data-val="true" data-val-regex="White space is not allowed." data-val-regex-pattern="(\S)+" data-val-remote="Username is already taken." data-val-remote-additionalfields="*.UserName" data-val-remote-url="/beta/Validation/UserNameExists" data-val-required="The Username (spaces will be stripped, must be at least 6 characters long) field is required." id="Register_UserName" name="Register.UserName" size="30" spellcheck="false" type="text" value="">
</div>
调试
如果用Firebug检查是怎么回事...的远程验证正在发送属性名代替属性ID进入验证方法(UserNameExists
一个)为:
Register.UserName
代替Register_UserName
所以我不能获取该值...... 不断 :(
这真的是一个bug或者是什么,有人已经找到我无法从谷歌搜索得到它?
下面是实际的问题的一个简单的图像:
我在这里看着屏幕,并希望你在线达林:) ...我必须说:哇...我从来没有见过这个伎俩,工作就像一个魅力:)我们不只是喜欢知道我们最喜欢的语言的新东西:D - 我只是难过我不能添加+10 :( - 非常感谢Darin! – balexandre 2011-04-27 07:51:10
我发现什么“令人讨厌”达林,适合我,在哪里绑定(包括= “bla”)没有工作。 – GoClimbColorado 2011-11-23 20:15:58