我使用的是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被證明是一個失敗,不得不被刪除。既然這是一個「普通」的網頁表單,無論輸入什麼內容,它總是被驗證爲真。有任何想法嗎? –