使用保存更改模型状态编辑用户数据.伊斯瓦伊德问题



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

错误 =函数计算需要运行所有线程{"一个或多个实体的验证失败。有关更多详细信息,请参阅"实体验证错误"属性。

这是我的文件 数据库用户界面 具有数据类型的数据库表用户

注册和密码使用

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

配置文件视图((用户控制器.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>
}
}

和最后一个文件用户.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; }
}
}

我在这里找到了答案:实体框架/MVC3:暂时禁用验证

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

最新更新