在asp.net mvc验证

时间:2014-04-28 09:50:25

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

我有一个动作创建和方法保存。 create动作只显示如下所示的视图

public ActionResult Create()
        {
return view();
}

在创建视图中,我得到的名称,地址等字段很少。一旦用户输入数据并单击保存按钮,我就会使用ajax调用调用Save方法。 在Save方法中,我正在验证数据:

 [HttpPost]
            public bool Save(UserModel User)
            {
                if (ModelState.IsValid)
                {

                    // save the data
                     return true;
                }

                else
                {
                   return false; 
                }
            } 

此方法的响应用于创建视图的ajax:

$(function () {
         $("#btnSave").click(function () {
                $.ajax({
                 type: "POST",
                 contentType: "application/json;charset=utf-8",
                 url: "/Contoller/Save",
                 data:
                            // parameters
                 async: false,
                 success: function (data_l) {
                     if (data_l == true)
                     {
                         alert("record has been saved in database");
                         window.location.href = "@Url.Action("Index","Controller")";
                     }
                     else{
                         alert ("Invalid Entry");
                         window.location.href = "@Url.Action("Create","Controller")";
                     }
                 },
                   error: function () {
                       console.log("there is some error");
                   }
             });
         });

我想要实现的是基于Save方法的响应,我应该执行两个操作。如果数据已正确验证,则会保存数据并加载索引页。如果验证失败,我想显示创建视图,其中包含输入的字段以及验证消息。 我确信数据注释属性在模型中正确使用。有人可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

我建议您在服务器端执行验证,即在控制器中执行验证。首先执行输入验证,如果一切正常,则将数据保存在持久存储中。如果数据保存成功,则加载索引视图或列表视图(无论哪种视图返回View()或RedirectToResult())。如果有任何问题,请在ModelState对象中添加错误并返回相同的视图。在客户端,错误将与用户已输入的数据一起显示。

有关示例,请参阅下面的代码段(可能还有其他方法,但这是我们目前使用的方式):

    public ActionResult AddNewSearch(SearchViewModel searchModel)
    {
        if (User.Identity.IsAuthenticated)
        {
            if (ModelState.IsValid)
            {
                var organizationUser = this.GetUser();

                if (organizationUser == null)
                {
                    ModelState.AddModelError("RecordNotFound", string.Format("No organization user found!!!"));
                    return RedirectToAction("LogOff", "Account");
                }

                if (this.searchService.GetUserSearch(organizationUser.Id, searchModel.Name) != null)
                {
                    ModelState.AddModelError("RecordAlreadyExists", string.Format("Search already exists!!!"));
                    return View(searchModel);
                }

                var userSearchDomainModel = mappingService.Map<SearchViewModel, Search>(searchModel);
                searchService.AddUserSearch(organizationUser, userSearchDomainModel);
                return RedirectToAction("Index", "Search");
            }
        }

        return RedirectToAction("Index", "Search");
    }