我使用的是VS 2012/.NET 4.5,EF 5以及从旧版VS 2012/.NET 4项目导入/打开的解决方案。在原始项目中从数据库生成了一个edmx(w/self-tracking entities),我只是试图使用ASP.NET web表单而不是MVC将数据验证添加到我的模型中。 MVC不是这个项目的选择。验证:使用ModelState w/Web窗体和EF
我试过这种方法,同时谷歌搜索几天,并将各种信息拼接在一起。
我试过使用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;
}
}
}
...在Web表单:
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”状态,sans绑定?
这是我用来获取了一堆我试过的文章:
http://msdn.microsoft.com/en-us/vs11trainingcourse_aspnetwebforms45_topic3.aspx
任何帮助,将不胜感激。
非常感谢。这是*不容易找到的信息。这工作,并且是我的问题的一个很好的解决方案。 –
好吧,我错了 - 有点。当我使用FormView时,这个工作和一切都验证。 FormView被证明是一个失败,不得不被删除。既然这是一个“普通”的网页表单,无论输入什么内容,它总是被验证为真。有任何想法吗? –