Редактировать данные пользователя с помощью savechanges modelstate.Isvaild проблема - PullRequest
0 голосов
/ 14 февраля 2020

Я хочу обновить данные пользователя, такие как Firstname, Lastname и date-of-birth. хотя ModelState является действительным и SaveChanges не работает. Я получил несколько ошибок для ModelState, которые касаются полей пароля и электронной почты. ошибка около SaveChanges относится к confirmpassword частичному классу. Я думаю, что именно об этом говорят ошибки!

Error = Для оценки функции требуется, чтобы все потоки выполнялись . {"Проверка не удалась для одной или нескольких сущностей. Подробнее см. В свойстве EntityValidationErrors."}

вот мои файлы UI базы данных таблица базы данных пользователь с типом данных

Регистрация и использование пароля

        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);
        }

просмотр профиля () 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.cs html

@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; }
    }
}

1 Ответ

0 голосов
/ 15 февраля 2020

Я нашел ответ здесь: Entity Framework / MVC3: временно отключить проверку

Временно отключив проверку, я могу обойти проверку проверки других свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...