J'ai utilisé ce code pour mettre à jour les données de l'utilisateur dans asp.net mvc 5
Je pense que tout est OK, mais je ne sais pas pourquoi je reçois un message d'erreur et les données ne sont pas enregistrées et if (ModelState.IsValid)
dans le contrôleur est toujours. Quelqu'un pourrait-il m'aider s'il vous plaît?Pourquoi si l'instruction renvoie toujours false dans asp.net mvc lors de la mise à jour des données?
Controller Admin
[HttpGet]
public ActionResult EditUser(int id)
{
var load = db.Users.Find(id);
return View(load);
}
private const string _ImagesPathUser = "~/Images/User";
[HttpPost]
public ActionResult EditUser(User user, HttpPostedFileBase UploadImage)
{
if (ModelState.IsValid) // always returns false
{
UserRepositories blUser = new UserRepositories();
if (UploadImage != null)
{
// Delete exiting file
System.IO.File.Delete(Path.Combine(Server.MapPath(_ImagesPathUser), user.UserImage));
// Save new file
string fileName = Guid.NewGuid() + Path.GetFileName(UploadImage.FileName);
string path = Path.Combine(Server.MapPath(_ImagesPathUser), fileName);
UploadImage.SaveAs(path);
user.UserImage = fileName;
}
if (blUser.Update(user))
{
return JavaScript("alert(' added');");
}
else
{
return JavaScript("alert(' didn't add');");
}
}
else
{
return JavaScript("alert('Error');");
}
}
UserRepositories.cs
public bool Delete(int id, bool autoSave = true)
{
try
{
var entity = db.Users.Find(id);
db.Entry(entity).State = System.Data.Entity.EntityState.Deleted;
if (autoSave)
{
bool result = Convert.ToBoolean(db.SaveChanges());
if (result)
{
try
{
if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + "\\Images\\User\\" + entity.UserImage) == true)
{
File.Delete(AppDomain.CurrentDomain.BaseDirectory + "\\Images\\User\\" + entity.UserImage);
}
}
catch { }
}
return result;
}
else
return false;
}
catch
{
return false;
}
}
EditUser.cs
@model NP1.Models.User
@{
ViewBag.Title = "EditUser";
Layout = "~/Views/Admin/AdminLayout.cshtml";
}
<h2>EditUser</h2>
@using (Html.BeginForm("EditUser", "Admin", FormMethod.Post, new { enctype = "multipart/form-data", id = "myUploadForm5" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>User</h4>
<hr />
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.UserID)
<div class="form-group">
@Html.LabelFor(model => model.UserEmail, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserEmail)
@Html.ValidationMessageFor(model => model.UserEmail)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.UserFirstName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserFirstName)
@Html.ValidationMessageFor(model => model.UserFirstName)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.UserLastName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserLastName)
@Html.ValidationMessageFor(model => model.UserLastName)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.UserPassWord, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserPassWord)
@Html.ValidationMessageFor(model => model.UserPassWord)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.UserCellPhone, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserCellPhone)
@Html.ValidationMessageFor(model => model.UserCellPhone)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.UserTell, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserTell)
@Html.ValidationMessageFor(model => model.UserTell)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.UserImage, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.ImageFor(model => model.UserImage, new { width = "300" }, "", "Images", "User")
@Html.Upload("UploadImage")
@Html.HiddenFor(model => model.UserImage)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.UserAddress, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserAddress)
@Html.ValidationMessageFor(model => model.UserAddress)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.UserBirthDate, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserBirthDate)
@Html.ValidationMessageFor(model => model.UserBirthDate)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.UserGender, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserGender)
@Html.ValidationMessageFor(model => model.UserGender)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
}
User.cs
public partial class User
{
public int UserID { get; set; }
public string UserEmail { get; set; }
public string UserFirstName { get; set; }
public string UserLastName { get; set; }
public string UserPassWord { get; set; }
public string UserCellPhone { get; set; }
public string UserTell { get; set; }
public string UserImage { get; set; }
public string UserAddress { get; set; }
public Nullable<byte> UserStatus { get; set; }
public Nullable<System.DateTime> UserBirthDate { get; set; }
public string UserGender { get; set; }
}
UserMetaData.cs
internal class UserMetaData
{
[ScaffoldColumn(false)]
[Bindable(false)]
public int UserID { get; set; }
[Required(ErrorMessage = "enter email", AllowEmptyStrings = false)]
[DisplayName("email")]
[Display(Name = "email")]
[RegularExpression(@"^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,4})$", ErrorMessage = "enter correct email")]
public string UserEmail { get; set; }
[Required(ErrorMessage = "enter your name", AllowEmptyStrings = false)]
[DisplayName("name")]
[Display(Name = "name")]
[StringLength(50, ErrorMessage = "should be 50")]
public string UserFirstName { get; set; }
[Required(ErrorMessage = "enter your last name", AllowEmptyStrings = false)]
[DisplayName("last name")]
[Display(Name = "last name")]
[StringLength(50, ErrorMessage = "should be 50")]
public string UserLastName { get; set; }
[Required(ErrorMessage = "enter password", AllowEmptyStrings = false)]
[Display(Name = "password")]
[DisplayName("password")]
[DataType(DataType.Password)]
public string UserPassWord { get; set; }
[Display(Name = "mobile")]
[DisplayName("mobile")]
[RegularExpression(@"^0?9[123]\d{8}$", ErrorMessage = "enter mobile correct")]
[StringLength(11, ErrorMessage = "should be 11")]
public string UserCellPhone { get; set; }
[Display(Name = "tel")]
[DisplayName("tel")]
[StringLength(11, ErrorMessage = "should be 11")]
public string UserTell { get; set; }
public string UserImage { get; set; }
public string UserAddress { get; set; }
[ScaffoldColumn(false)]
[Display(Name = "status")]
[DisplayName("status")]
public Nullable<byte> UserStatus { get; set; }
[Display(Name = "BirthDate")]
[DisplayName("BirthDate")]
public Nullable<System.DateTime> UserBirthDate { get; set; }
[Display(Name = "gender")]
[DisplayName("gender")]
public string UserGender { get; set; }
}
}
namespace NP1.Models
{
[MetadataType(typeof(NP1.Models.MetaData.UserMetaData))]
public partial class User
{
[Required(ErrorMessage = "enter your pass", AllowEmptyStrings = false)]
[Display(Name = "repeate pass")]
[DisplayName("repeate pass")]
[DataType(DataType.Password)]
[Compare("UserPassWord", ErrorMessage = "not equal")]
public string UserConfirmPassWord { get; set; }
public int Year { get; set; }
public int Month { get; set; }
public int Day { get; set; }
}
Pouvez-vous poster le modèle? – NikolaiDante
J'ai mis à jour mon poste cher @NikolaiDante –
Vous pouvez vérifier votre erreur de cette façon: var errors = ModelState.Values.SelectMany (v => v.Errors); – Skatz1990