【问题标题】:Edit User Data with savechanges modelstate.Isvaild problem使用 savechanges modelstate.Isvaild 问题编辑用户数据
【发布时间】:2020-05-30 10:28:11
【问题描述】:

我想更新FirstnameLastnamedate-of-birth 等用户详细信息。尽管ModelState 有效并且SaveChanges 不起作用。我收到了ModelState 的一些错误,这些错误与密码和电子邮件字段有关。 关于SaveChanges 的错误是关于confirmpassword 部分类我认为这就是错误所说的!

错误 = 函数评估需要所有线程运行{“一个或多个实体的验证失败。有关详细信息,请参阅 'EntityValidationErrors' 属性。”}

这是我的文件 database UI database table user with datatype

注册和密码使用

        public ActionResult Registration([Bind(Exclude = "IsEmailVerified,ActivationCode")] User user)
        {
            bool Status = false;
            string message = "";
            //
            // Model Validation 
            if (ModelState.IsValid)
            {

                #region //Email is already Exist 

                var isExist = IsEmailExist(user.EmailID);
                if (isExist)
                {
                    ModelState.AddModelError("EmailExist", "ایمیل شما قبلا ثبت شده است");
                    return View(user);
                }
                #endregion

                #region Generate Activation Code 
                user.ActivationCode = Guid.NewGuid();
                #endregion

                #region  Password Hashing 
                user.Password = Crypto.Hash(user.Password);
                user.Confirmpassword = Crypto.Hash(user.Confirmpassword); //
                #endregion
                user.IsEmailVerified = false;

                #region Save to Database
                using (sitedatabaseEntities1 dc = new sitedatabaseEntities1())
                {
                    dc.Users.Add(user);
                    dc.SaveChanges();

                    //Send Email to User
                    SendVerificationLinkEmail(user.EmailID, user.ActivationCode.ToString());
                    message = "تبریک ثبت نام شما با موفقیت انجام شد. " +
                        " و کد فعال سازی برای شما ارسال گردید به ایمیل:" + user.EmailID;
                    Status = true;
                }
                #endregion
            }
            else
            {
                message = "درخواست نادرست";
            }

            ViewBag.Message = message;
            ViewBag.Status = Status;
            return View(user);
        }

profile view() usercontroller.cs

            public ActionResult profile()
        {
            using (sitedatabaseEntities1 db = new sitedatabaseEntities1())
            {
                int userid = int.Parse(Request.Cookies["userid"].Value);
                return View(db.Users.Where(x => x.UserID == userid).FirstOrDefault());
            }
        }

        [HttpPost]
        public ActionResult profile([Bind(Include = "UserID,FirstName,LastName,DateOfBirth")] User user)
        {
            var message = "";
            if (ModelState.IsValid)
                {
                    if (user != null)
                    {
                        var account = db.Users.Where(a => a.UserID == user.UserID).FirstOrDefault();
                        account.FirstName = user.FirstName;
                        account.LastName = user.LastName;
                        account.DateOfBirth = user.DateOfBirth;
                        db.SaveChanges();
                        message = "اطلاعات با موفیت ویرایش شد.";
                    }
                    else
                    {
                        message = "مشکلی در فرایند ویرایش اطلاعات ایجاد شده است.";
                    }
                }
            ViewBag.Message = message;
            return View();
        }

profile.cshtml

@model projectwebsite.Models.User

 @using (Html.BeginForm())
                                {
                                    @Html.AntiForgeryToken()
                                    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                                    @Html.HiddenFor(model => model.UserID)
                                    <small class="text-muted">@Html.LabelFor(model => model.FirstName)</small>
                                    @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } })
                                    @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "form-text text-danger" })
                                    <hr>
                                    <small class="text-muted">@Html.LabelFor(model => model.LastName)</small>
                                    @Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } })
                                    @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "form-text text-danger" })
                                    <hr>
                                    <small class="text-muted">@Html.LabelFor(model => model.DateOfBirth)</small>
                                    @Html.EditorFor(model => model.DateOfBirth, new { htmlAttributes = new { @class = "form-control" } })
                                    @Html.ValidationMessageFor(model => model.DateOfBirth, "", new { @class = "form-text text-danger" })
                                    <button type="submit" value="Save" class="btn btn-success"> submit</button>
                                    if (ViewBag.Message != null)
                                    {
                                        <div class="alert alert-danger">
                                            <strong>error</strong>@ViewBag.Message
                                        </div>
                                    }
                                }

最后一个文件 user.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace projectwebsite.Models
{
    [MetadataType(typeof(UserMetadata))]
    public partial class User
    {
        public string Confirmpassword { get; set; }
    }
    public class UserMetadata
    {
        [Display(Name="نام")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "نام خود را وارد کنید.")]
        public string FirstName { get; set; }

        [Display(Name ="نام خانوادگی")]
        [Required(AllowEmptyStrings = false, ErrorMessage ="نام خانوادگی را وارد کنید.")]
        public string LastName { get; set; }

        [Display(Name ="ایمیل")]
        [Required(AllowEmptyStrings = false, ErrorMessage ="ایمیل خود را وارد کنید")]
        [DataType(DataType.EmailAddress)]
        public string EmailID { get; set; }

        [Display(Name = "تاریخ تولد")]
        [DataType(DataType.Date)]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
        public DateTime DateOfBirth { get; set; }

        [Display(Name = "پسورد")]
        [Required(AllowEmptyStrings =false, ErrorMessage ="پسورد را وارد کنید.")]
        [DataType(DataType.Password)]
        [MinLength(6,ErrorMessage ="6 حرف کمترین طول پسورد میباشد.")]
        public string Password { get; set; }

        [Display(Name ="تکرار پسورد")]
        [DataType(DataType.Password)]
        [Compare("Password",ErrorMessage ="رمز عبور برابر نیست.")]
        public string Confirmpassword { get; set; }
    }
}

【问题讨论】:

  • 请分享您的输入和您遇到的错误
  • 错误是严重。如果您不打算提供它们,那么我们将无法帮助您。
  • 我不确定您对模型做了什么。您正在调用使用用户作为模型,而用户中唯一的事情是确认密码。除非您有其他模型,否则您不会展示。我很难认为这段代码会起作用。我还会给操作起一个名称,例如 Edit 或 ProfileEdit。你只会因为使用错误的名字而开始迷惑自己。
  • @Soban-Re savechanges() 存在系统验证错误;当我为其设置错误消息时,它会显示 user.cs 文件,正如您在帖子中看到的最后一个字符串 confirmpassword {get:set} 错误消息在断点中我还需要从模型状态中删除密码和电子邮件 ID 以使模型状态有效我在帖子中添加了用户数据库和密码使用情况,谢谢您可以查看

标签: html asp.net-mvc model-view-controller asp.net-mvc-5 backend


【解决方案1】:

我在这里找到了答案:Entity Framework/MVC3: temporarily disable validation

通过暂时禁用验证,我可以绕过其他属性验证检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多