1

VS 2012 / .NET 4.5、EF 5、および古いVS 2012 /.NET4プロジェクトからインポート/オープンされたソリューションを使用しています。edmx(自己追跡エンティティ付き)は元のプロジェクトのデータベースから生成されました。MVCではなくASP.NET Webフォームを使用して、モデルにデータ検証を追加しようとしています。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;
        }
    }
}

... 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」状態を変更する方法はありますか?

これは私が試したものの束を得るために使用した記事です:

http://msdn.microsoft.com/en-us/vs11trainingcourse_aspnetwebforms45_topic3.aspx

どんな助けでもいただければ幸いです。

4

2 に答える 2

2

MVC では、モデルの検証はコントローラーによって自動的に呼び出されます。ValidationContextWeb フォームを使用しているため、とを使用して検証を自分で呼び出す必要がありますTryValidateObject

http://odetocode.com/blogs/scott/archive/2011/06/29/manual-validation-with-data-annotations.aspxを参照してください。

于 2012-10-04T08:27:59.910 に答える