سلام خسته نباشید
همونطور که میدونید فیلترگذاری امر وقت گیری هست ،زمانی که دیتابیس رو آپدیت میکنید کل فیلتر ها نیز پاک میشه (ظاهرا کلاس ها رو کامل پاک میکنه و از اول میسازه)
راهی وجود نداره تا فیلتر ها جای خودشون بمون ؟
با سپاس
میتونید در model.tt تغییرات را اعمال کنید
یا کلاس هایی به عنوان MetaData ایجاد کنید تا صفت ها را به این کلاس اعمال کنید و دیگر نگران پاک شدن صفت ها نباشید
با سلام و خسته نباشید خدمت شما دوست عزیز
برای رفع این مشکل شما باید یک کلاس internal جدا برای هریک از کلاس های تولید شده در model در نظر بگیر ( با خصوصیات یکسان , نیازی به نوشتن کد های مربوط به ارتباط بین جداول نیست) سپس یک ارتباط بین انها ایجاد کنید , لازم به ذکر است که باید فضای نام یکسان باشد به مثال زیر توجه کنید
کد تولید شده توسط mvc
namespace MvcInternetShop.Models.DomainModels { using System; using System.Collections.Generic; public partial class User { public User() { this.Factors = new HashSet<Factor>(); } public int Id { get; set; } public string Name { get; set; } public string Username { get; set; } public string Password { get; set; } public Nullable<System.DateTime> BirthDate { get; set; } public string Mobile { get; set; } public string Tell { get; set; } public bool Gender { get; set; } public byte Status { get; set; } public string Roles { get; set; } public virtual ICollection<Factor> Factors { get; set; } } }
و کدی که ماباید بنویسیم
using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcInternetShop.Models.EntityModels { internal class UserMetaData { [ScaffoldColumn(false)] [Bindable(false)] public int Id { get; set; } [Required(ErrorMessage = "نام و نام خانوادگی خود را وارد کنید", AllowEmptyStrings = false)] [DisplayName("نام و نام خانوادگی")] [Display(Name = "نام و نام خانوادگی")] [StringLength(50, ErrorMessage = "این فیلد باید حداکثر 50 کاراکتر باشد")] public string Name { get; set; } [Required(ErrorMessage = "ایمیل خود را وارد کنید")] [Display(Name = "ایمیل (نام کاربری)")] [DisplayName("ایمیل (نام کاربری)")] [RegularExpression(@"^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,4})$", ErrorMessage = "ایمیل را بدرستی وارد کنید")] [StringLength(50, ErrorMessage = "این فیلد باید حداکثر 50 کاراکتر باشد")] public string Username { get; set; } [Required(AllowEmptyStrings = false, ErrorMessage = "رمز عبور خود را وارد کنید")] [DisplayName("رمز عبور")] [Display(Name = "رمز عبور")] [DataType(DataType.Password)] public string Password { get; set; } [Display(Name = "تاریخ تولد")] [DisplayName("تاریخ تولد")] public Nullable<System.DateTime> BirthDate { get; set; } [DisplayName("شماره موبایل")] [Display(Name = "شماره موبایل")] [RegularExpression(@"^0?9[123]\d{8}$", ErrorMessage = "شماره موبایل را بدرستی وارد کنید")] [StringLength(50, ErrorMessage = "این فیلد باید حداکثر 50 کاراکتر باشد")] public string Mobile { get; set; } [Display(Name = "شماره تماس")] [DisplayName("شماره تماس")] [StringLength(50, ErrorMessage = "این فیلد باید حداکثر 50 کاراکتر باشد")] public string Tell { get; set; } [DisplayName("جنسیت")] [Display(Name = "جنسیت")] public bool Gender { get; set; } [ScaffoldColumn(false)] [DisplayName("وضعیت")] [Display(Name = "وضعیت")] public byte Status { get; set; } } } namespace MvcInternetShop.Models.DomainModels { [MetadataType(typeof(MvcInternetShop.Models.EntityModels.UserMetaData))] public partial class User { [Required(AllowEmptyStrings = false, ErrorMessage = "رمز عبور خود را تکرار کنید")] [DisplayName("تکرار رمز عبور")] [Display(Name = "تکرار رمز عبور")] [DataType(DataType.Password)] [Compare("Password", ErrorMessage = "تکرار پسورد یکسان نیست")] public string ConfirmPassword { get; set; } } }
امید وارم استفاده ببرید . یا حق
ممنون فقط یک سوال این کلاس UserMetaData که خودمان ایجاد می کنیم باید در پوشه مدل باشه ؟
و کلا نیاز به معرفی چیزی در ویو نیست ؟
باسپاس
اجباری نیست ولی اگر در Model باشه بهتره
نه نیازی به تغییر در VIew نیست
سلام من این کارو انجام دادم و درست شد اما
زمانی که بک ویو پاک کردم و دوباره ساختم ،فیلترها اعمال نشدن !
مثالا تکس ادیتور کامل اعمال نمیشه !
کسی دلیلشو نمیدونه ؟
حتما کلاس Metadata را به کلاس اصلی وصل نکردید
[MetadataType(typeof(MvcInternetShop.Models.EntityModels.UserMetaData))]
والا من اینطوری نوشتم
namespace SPR.Models { [MetadataType(typeof(PostsMetaData))] public partial class Posts { } }
صفت ها رو باید داخل کلاس Metadata اعمال کنید
کلا کلاس متادیتام اینه
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SPR.Models { internal class PostsMetaData { [Key] public int PostID { get; set; } [Display(Name = "موضوع دسته بندی")] public int PostGroupsID { get; set; } [Display(Name = "عنوان مطلب")] [Required(ErrorMessage = "اجباری! لطفا{0} را پر کنید.")] public string PostTitle { get; set; } [Display(Name = "محتوای مطلب")] [Required(ErrorMessage = "اجباری! لطفا{0} را پر کنید.")] [UIHint("RichText")] public string PostContent { get; set; } //پنهان کردن [ScaffoldColumn(false)] public System.DateTime PostContentDate { get; set; } //پنهان کردن [ScaffoldColumn(false)] public string PostImageTumbnailURL { get; set; } //پنهان کردن [ScaffoldColumn(false)] public Nullable<int> CommentID { get; set; } //پنهان کردن [ScaffoldColumn(false)] public int UserID { get; set; } [UIHint("RichText")] [Display(Name = "خلاصه مطلب")] [Required(ErrorMessage = "اجباری! لطفا{0} را پر کنید.")] [StringLength(500)] public string PostContentSummary { get; set; } [Display(Name = "عکس مطلب")] [Required(ErrorMessage = "اجباری! لطفا{0} را پر کنید.")] public string PostImageURL { get; set; } } } namespace SPR.Models { [MetadataType(typeof(PostsMetaData))] public partial class Posts { } }
همه چی درست به نظر میاد
در واقع باید درست کار کنه
مثلا [UIHint(
"RichText"
)] برای posts کار نمیکنه
چرا از DataType استفاده نکردید ؟
آیا Customize کردید ؟
منظورتون رو متوجه نشدم
دزستش کردم
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)