网上看到的例子,当将model当成一个属性时,验证方法传过来的参数就为空?源码如下
model类:
public class User
    {
        [Required(ErrorMessage="姓名不能为空")]
        [Remote("IsUnique_Available","Home")]
        public string Name { get; set; }
    }封装后的Users类
 public class EditUserVM
    {
        /// <summary>
        /// User VM
        /// </summary>
        public User Users
        { 
            get;
            set;
        }
    }
view页面:
@model MvcRemoteValidation.ViewModels.UserViewModels.EditUserVM@{
    ViewBag.Title = "Create";
    Layout = "~/Views/Shared/_Layout.cshtml";
}<h2>Create</h2><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>@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>User</legend>        <div class="editor-label">
            @Html.LabelFor(model => model.Users.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Users.Name)
            @Html.ValidationMessageFor(model => model.Users.Name)
        </div>        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}<div>
    @Html.ActionLink("Back to List", "Index")
</div>
Controller中的代码:
public JsonResult IsUnique_Available(string Name)//User封装成属性后无法取到值?
        {
            List<User> users = UserService.GetUsers();
            users = users.Where(u => u.Name == Name).ToList();
            if (users.Count == 0)
                return Json(true, JsonRequestBehavior.AllowGet);                string suggestedUID = String.Format(CultureInfo.InvariantCulture,
                "{0} 已经存在。", Name);
                        return Json(suggestedUID, JsonRequestBehavior.AllowGet);
        }
 
 
这时,IsUnique_Available方法中的参数name,传过来的都为null ? 但如果在view页面,直接用User,参数就可取到值,请问各位,是什么原因?谢谢!

解决方案 »

  1.   

    那就改成你用的Model,不就行了~~        public JsonResult IsUnique_Available(EditUserVM model)
            {
                List<User> users = UserService.GetUsers();
                users = users.Where(u => u.Name == model.Users.Name).ToList();
                if (users.Count == 0)
                    return Json(true, JsonRequestBehavior.AllowGet);            string suggestedUID = String.Format(CultureInfo.InvariantCulture,
                "{0} 已经存在。", model.Users.Name);
                return Json(suggestedUID, JsonRequestBehavior.AllowGet);
            }
      

  2.   

    很显然,封装之后,你表单中根本就没有一个name="Name"的input元素,所以获取不到,你可以查看页面源文件就会发现它的name应该为User.Name;这样你在获取的时候用model去获取EditUserVM model,当然如果你没有把Name封装在User里而是在EditUserVM里的话是可以通过string Name取到的