Asp.net mvc 数据库第一个数据注释问题asp.net mvc 4
我在使用database first方法进行模型验证时遇到问题,我读到Scott Gu的著名著作,但问题是它在我的mvc项目中不起作用,我的Edmx文件在project.model类库中,我的验证类在project.model.Membership命名空间中,我在这里没有真正理解问题的概念。 代码如下:Asp.net mvc 数据库第一个数据注释问题asp.net mvc 4,asp.net-mvc,entity-framework,asp.net-mvc-4,data-annotations,model-validation,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,Data Annotations,Model Validation,我在使用database first方法进行模型验证时遇到问题,我读到Scott Gu的著名著作,但问题是它在我的mvc项目中不起作用,我的Edmx文件在project.model类库中,我的验证类在project.model.Membership命名空间中,我在这里没有真正理解问题的概念。 代码如下: namespace Project.Model //part of generated code by EF database first public partial class Member
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; }
}
好的,那么首先,看看这个: 其次,我建议使用ViewModels来验证对象。如下面代码中的快捷方式: MemberViewModel.cs 然后,将ViewModel发送到编辑/添加视图: Add.cshtml
通过这种方法,您可以获得清晰的实体模型POCO类,如Member和Domian模型ViewModels,如MemberViewModel,并进行自定义验证。视图模型很好,但如果我想这样做,最好采用代码优先的方法,因为我先使用数据库,使用视图模型而不是使用生成的模型类是一种额外的工作和代码,我认为它与我的名称空间有关,但我真的不知道如何修复它!不,viewmodels不仅仅适用于代码优先的方法。这也是代码优先和数据库优先使用的模式。谢谢,我认为最好还是把我的头发放在元数据上
public class MemberViewModel
{
[Required]
[StringLength(10)]
public string mName { get; set; }
[Required]
public string mLName { get; set; }
}
@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" />
}
[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);
}