لطفا کد های خود در فرمت code کد قرار دهید،
لطفا کد ها را با استفاده از کلید code ادیتور قرار دهید تا بشه خوند
کدهای مدل user را نیز قرار دهید
@model DataLayer.Users @{ ViewBag.Title = "افزودن " + Server.HtmlDecode(Html.DisplayNameFor(model => model).ToString()); } <h2>افزودن @Html.DisplayNameFor(model => model)</h2> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-horizontal"> @Html.ValidationSummary(true) <div class="form-group"> @Html.LabelFor(model => model.RoleId, new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.DropDownList("RoleId", String.Empty) @Html.ValidationMessageFor(model => model.RoleId) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.UserName, new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.UserName) @Html.ValidationMessageFor(model => model.UserName) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.PassWord, new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.PassWord) @Html.ValidationMessageFor(model => model.PassWord) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Email, new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Email) @Html.ValidationMessageFor(model => model.Email) </div> </div> <div class="form-group"> <div class="col-md-2"> </div> <div class="col-md-10"> @Html.EditorFor(model => model.IsActive) @Html.LabelFor(model => model.IsActive) @Html.ValidationMessageFor(model => model.IsActive) </div> </div> <div class="form-group" id="buttons"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="ایجاد" class="btn btn-primary" /> @Html.ActionLink("بازگشت به فهرست", "Index") </div> </div> </div> } <script src="~/Scripts/jquery-1.10.2.min.js"></script> <script src="~/Scripts/jquery.validate.min.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> -------------------------------------------------------------------------------------------------------------- ------------user class------------------------------------------------------------------------------------- //------------------------------------------------------------------------------ // <auto-generated> // This code was generated from a template. // // Manual changes to this file may cause unexpected behavior in your application. // Manual changes to this file will be overwritten if the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ namespace DataLayer { using System.ComponentModel.DataAnnotations; using System; using System.Collections.Generic; [MetadataType(typeof(UsersMetaData))] public partial class Users { public int UserId { get; set; } public int RoleId { get; set; } public string ActiveCode { get; set; } public string UserName { get; set; } public string PassWord { get; set; } public string Email { get; set; } public bool IsActive { get; set; } public System.DateTime RegisterDate { get; set; } public virtual Roles Roles { get; set; } //private class UsersMetaDate //{ //} } }
منظورم مدلی که صفت هارو داره بود
MetaData رو قرار بدید
using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Mvc.Html; namespace DataLayer { [DisplayName("کاربر")] [DisplayPluralName("کاربران")] public class UsersMetaData { [Key] public int UserId { get; set; } [Display(Name = "نقش کاربر")] [Required(ErrorMessage = "لطفا {0} را وارد کنید")] public int RoleId { get; set; } [Display(Name = "کد فعال سازی")] [Required(ErrorMessage = "لطفا {0} را وارد کنید")] public string ActiveCode { get; set; } [Display(Name = "نام کاربری")] [Required(ErrorMessage = "لطفا {0} را وارد کنید")] public string UserName { get; set; } [Display(Name = "کلمه عبور")] [Required(ErrorMessage = "لطفا {0} را وارد کنید")] public string PassWord { get; set; } [Display(Name = "ایمیل")] [Required(ErrorMessage = "لطفا {0} را وارد کنید")] public string Email { get; set; } [Display(Name = "فعال / غیر فعال")] [Required(ErrorMessage = "لطفا {0} را وارد کنید")] public bool IsActive { get; set; } [Display(Name = "تاریخ ثبت نام")] [DisplayFormat(DataFormatString = "{0: yyyy/MM/dd}")] [Required(ErrorMessage = "لطفا {0} را وارد کنید")] public System.DateTime RegisterDate { get; set; } } //[MetadataType(typeof(UsersMetaData))] //public partial class Users //{ //} }
البته فایل tt را هم تغییر دادم
شما به ActiveCode صفت Required دادید ولی در ویو نیست
به همین خاطر هست که ModelState نمیتونه Valid بشه
نباید به فیلد هایی که در ویو نمیخواهید باشند صفت اجباری بدید
به این دلیل IsValid شما false است که در ورودی چند پارامتر null رد می شود، شما میتوان فیلد های مورد نظر خود را داخل یک UserViewModel قرار دهید و سپس آن را با کلاس اصلی User ادقام کنید:
public ActionResult Create(UserViewModel userViewModel) { if (ModelState.IsValid) { var user = new User() { RoleId = userViewModel.RoleId, Email = userViewModel.Email, PassWord = userViewModel.PassWord, IsActive = userViewModel.IsActive, UserName = userViewModel.UserName }; } // more code return View(); }
public class UserViewModel { public int RoleId { get; set; } public string UserName { get; set; } public string PassWord { get; set; } public string Email { get; set; } public bool IsActive { get; set; } }
کاملا درست فرمودید. مشکل حل شد
بسیار سپاسگذار
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)