我正在使用 VS 2012/.NET 4.5、EF 5 以及从较旧的 VS 2012/.NET 4 项目导入/打开的解决方案。从原始项目中的数据库生成了一个 edmx(带有自跟踪实体),我只是尝试使用 ASP.NET Web 表单而不是 MVC 向我的模型添加数据验证。MVC 不是此项目的选项。
我已经尝试过这种方法,同时谷歌搜索了几天并将各种信息拼接在一起。
我试过使用 MetadataType 来扩展我的 edmx 模型……它只是不工作。这是它的样子:
//generated by VS 2010
namespace DataAccess.Model
{
[DataContract(IsReference = true)]
public partial class NoBilling: IObjectWithChangeTracker, INotifyPropertyChanged
{
//...and so on...all generated by Visual Studio
}
}
...扩展:
namespace DataAccess.Model
{
[MetadataType(typeof(DataAccess.Model.NoBillingMetadata))]
public partial class NoBilling {}
public partial class NoBillingMetadata
{
[Required, StringLength(50)]
public string Company
{
get;
set;
}
[Required, MaxLength(50)]
public string EmailDomain
{
get;
set;
}
}
}
...在网络表单中:
protected void SaveButton_Click(object sender, EventArgs e)
{
//assign to entity
NoBilling nb = new NoBilling();
nb.Zip = "10001";
//save
try
{
NoBillingProxy nbPx = new NoBillingProxy();
nbPx.Save(nb);
}
catch (Exception exp)
{
//data validation
if (ModelState.IsValid)
{
//always tests true, no values in ModelState collection
}
throw;
}
}
我知道我在这里遗漏了一些东西,但我没有无限的时间来继续挖掘和拼凑东西。我不知道这个 ModelState 类的内部结构,它是如何被调用、触发等的。我假设它不起作用,因为我实际上没有绑定任何数据?我不会总是将实体绑定到控件,所以有没有办法改变“IsValid”状态,没有绑定?
这是我用来获得一堆我尝试过的文章:
http://msdn.microsoft.com/en-us/vs11trainingcourse_aspnetwebforms45_topic3.aspx
任何帮助,将不胜感激。