ModelState.IsValid保存表单

时间:2014-10-21 15:21:53

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

我正在尝试修复提交按钮。对MVC来说很新。

问题来自现有的保存按钮,我尝试将代码复制到新的保存按钮。

这是我的.cs代码

     [HttpPost]
     public ActionResult Save(Roles roleForm)
        {
            try
        {
            if (ModelState.IsValid)
            {
                var role = Srvctx.Roles.FirstOrDefault(w => w.RoleID == roleForm.RoleId);
                role.RoleDescription = roleForm.RoleDescription;
                Srvctx.SubmitChanges();
                return RedirectToAction("RoleManagement");
            }

            return RedirectToAction("RoleManagement");
        }
        catch
        {
            return RedirectToAction("RoleManagement");
        }

主要问题是:

          if (ModelState.IsValid)

显示为false,但它假设显示的内容而不是任何内容!!

当我点击保存时,它只会转到RoleManagement,但如果我做了任何修改,则不会进行更改。

任何想法出错的地方。

由于

我的角色课

   public class Roles
{
    [DisplayName("Role ID")]
    [Required]
    public int RoleId { get; set; }

    [DisplayName("Role Description")]
    [Required]
    public string RoleDescription { get; set; }

    [DisplayName("Customer Blacklist")]
    [Required]
    public List<M2DAL.M2Service.vw_RoleCustomerBlacklist> CustomerBlacklist { get; set; }

    private readonly M2ServiceDataContext _m2Sctx = new M2ServiceDataContext();
    public List<M2DAL.M2Service.Role> AllRoleIDs { get; set; }

    public Roles()
    {
    }

    public Roles(int roleId)
    {

        RoleId = roleId;
        RoleDescription = _m2Sctx.Roles.Where(s => s.RoleID == RoleId).Select(c=>c.RoleName).FirstOrDefault();
        CustomerBlacklist = _m2Sctx.vw_RoleCustomerBlacklists.ToList();


    }

}

2 个答案:

答案 0 :(得分:1)

如果ModelStatefalse,那么您有验证错误,因此您需要返回视图,以便用户可以更正这些错误,而不是重定向。

if (ModelState.IsValid)
{
  // save changes and redirect
}
return View(roleForm);

我认为您的视图包含@Html.ValidationMessageFor帮助程序以显示这些错误。您的catch语句也不应重定向到RoleManagement,因为这并不表示发生了错误。考虑抛出异常会显示错误页面或向ModelState添加错误消息并返回视图。

答案 1 :(得分:0)

我认为这是因为您正在重定向,因此呈现新页面。如果您有验证错误,您想要使用错误的数据再次呈现同一页面(那么您将看到所有验证错误)。

return RedirectToAction("RoleManagement");替换为

return View("RoleManagement", roleForm);