最近在熟悉MVC3.0。写了一个S_USER1类。
百思不得其解。后更换变量名为account。
public partial class S_USER1
{
#region Primitive Properties
public virtual decimal USER_ID
{
get;
set;
}
public virtual Nullable<decimal> ROLE_ID
{
get;
set;
}
public virtual decimal ORG_ID
{
get;
set;
}
public virtual string ENABLE_FLAG
{
get;
set;
}
[Required]
[DisplayName("登录账号:")]
[StringLength(100)]
[Remote("CheckUserAccountExists", "UserMgr", ErrorMessage = "登录账号重复")]
public virtual string ACCOUNT
{
get;
set;
}
}
验证代码如下:
[HttpGet]
public JsonResult CheckUserAccountExists(string userAccount)
{
bool exists = UserBll.CheckUserAccountExists(null, userAccount);
return Json(!exists, JsonRequestBehavior.AllowGet);
}
运行后发现,userAccount的值始终为null。页面端如下:
<div class="editor-label">
@Html.LabelFor(model => model.ACCOUNT)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ACCOUNT)
@Html.ValidationMessageFor(model => model.ACCOUNT)
</div>
百思不得其解。后更换变量名为account。
[HttpGet]
public JsonResult CheckUserAccountExists(string account)
{
bool exists = UserBll.CheckUserAccountExists(null, account);
return Json(!exists, JsonRequestBehavior.AllowGet);
}
参数正确取到了。写为大写的Account,发现也是可以取到值。
这个问题值得关注一下。留待后续研究。有知道原因的朋友也可以为我解惑。
接着又碰到了问题。ErrorMessage怎么不能正确显示呢?跟踪 return 的Json对象发现无异常,那只能是脚本有了问题。
查找了一些资料,发现我已经引用了
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
改成
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
后页面验证信息可以显示正常。难道问题出在了1.5.1上面?
进一步验证猜想,从网上下载了一个实例代码,用的就是1.5.1,在我的机器上跑也没有问题。
那就是剩下的两个js出了问题。找到新版本并替换原文件jquery.validate.min.js,jquery.validate.unobtrusive.min.js,一切OK了。
看来不能被jquery的表面现象迷惑。