0

У меня возникли проблемы с использованием валидации модели первого подхода к базе данных, я прочитал знаменитый ASP.NET MVC 2: Model Validation Скоттом Гу, но проблема в том, что это не сработало в моем проекте mvc, мой файл Edmx в библиотеке классов Project.Model и мой класс проверки в пространстве имен Project.Model.Membership, я не понимаю концепцию проблемы здесь. вот код:база данных первая аннотация данных Проблема asp.net mvc 4

namespace Project.Model 
//part of generated code by EF database first 
public partial class Member 
{ 
    public Member() 
    { 
     this.SideDuties = new HashSet<SideDuty>(); 
     this.Member_In_Role = new HashSet<Member_In_Role>(); 
     this.Messages = new HashSet<Message>(); 
     this.Messages1 = new HashSet<Message>(); 
    } 

    public System.Guid mId { get; set; } 
    public byte MemberTypeNo { get; set; } 
    public string mName { get; set; } 
    public string mLName { get; set; } 
    public string mUserName { get; set; } 
    public string mPass { get; set; } 
    public Nullable<byte> MarriageStatusNo { get; set; } 
    public Nullable<byte> GenderNo { get; set; } 
    public Nullable<int> mPhone { get; set; } 
    public Nullable<long> mMobile { get; set; } 
    public Nullable<int> mEmrgPhone { get; set; } 
    public Nullable<long> mEmrgMobile { get; set; } 
    public string mEmail { get; set; } 
    public string mProfilePicExt { get; set; } 
    public bool mIsOperator { get; set; } 
    public bool mIsAdmin { get; set; } 

    public virtual ... 
} 



namespace Project.Model.membership 
//my class handling data annotations, not work! 
[MetadataType(typeof(Member_Validation))] 
public partial class Member 
{ 

} 

//buddy class 
[Bind(Exclude = "mId")] 
public sealed class Member_Validation 
{ 
    //public System.Guid mId { get; set; } 
    public byte MemberTypeNo { get; set; } 
    [Required(ErrorMessage = "blah blah")] 
    public string mName { get; set; } 
    [Required] 
    public string mLName { get; set; } 
    public string mUserName { get; set; } 
    public string mPass { get; set; } 
    public Nullable<byte> MarriageStatusNo { get; set; } 
    public Nullable<byte> GenderNo { get; set; } 
    public Nullable<int> mPhone { get; set; } 
    public Nullable<long> mMobile { get; set; } 
    public Nullable<int> mEmrgPhone { get; set; } 
    public Nullable<long> mEmrgMobile { get; set; } 
    public string mEmail { get; set; } 
    public string mProfilePicExt { get; set; } 
    public bool mIsOperator { get; set; } 
    public bool mIsAdmin { get; set; } 
} 

ответ

0

нормально, так что, во-первых, посмотрите на это: http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-validation-to-the-model

Во-вторых, я бы рекомендовал использовать ViewModels для проверки объектов. Как и в коде ниже (в ярлыке):

MemberViewModel.cs

public class MemberViewModel 
{ 
    [Required] 
    [StringLength(10)] 
    public string mName { get; set; } 

    [Required] 
    public string mLName { get; set; } 
} 

И затем, отправить ViewModel редактировать/Добавить вид:

Add.cshtml

@Model MemberViewModel //namespace etc. 


@using (Html.BeginForm("Add")) 
{ 

@Html.ValidationSummary() 
@ViewBag.Status 
    @Html.LabelFor(m => m.mName) 
    @Html.TextBoxFor(m => m.mName) 
    @Html.ValidationMessageFor(m => m.mName) 

    @Html.LabelFor(m => m.mLName) 
    @Html.TextBoxFor(m => m.mLName) 
    @Html.ValidationMessageFor(m => m.mLName) 

    <input type="submit" /> 
} 

Контроллер и добавление ActionResult

[HttpPost] 
    public ActionResult Add(MemberViewModel model) 
    { 

     if (ModelState.IsValid) 
     { 
      Member memberToAdd = new Member{ }; 

      memberToAdd.mLName = model.mLName; 
      memberToAdd.mName = model.mName; 
      (..) 

      //some operation, perhaps on database, with memberToAdd 

      return RedirectToAction("xyz"); 
     } 
     else 
      return View(model); 
    } 

При таком подходе вы имеете четкую модель Entity (POCO классы как Member) и модель Domian (ViewModels как MemberViewModel) с таможенной проверкой.

+0

посмотреть модели хорошие, но если бы я хотел сделать это, было бы лучше пойти на первый подход к коду, теперь, когда я использую базу данных сначала, это своего рода дополнительная работа и код с использованием модели представления вместо использования сгенерированных классов моделей, Я думаю, что это относится к моим пространствам имен, но я действительно не знаю, как это исправить! –

+0

no, viewmodels предназначены не только для первого подхода кода. Это шаблон, который сначала используется в первом коде и в базе данных. – whoah

+0

Спасибо, я думаю, что лучше потянуть мои волосы над этой метаданной –

Смежные вопросы