0

MVC 4 アプリケーションを作成しており、Entity Framework 4.1 を使用しています。答えが見つからないように見える検証の質問があります。

基本的に、「名前」フィールドを含む「製品」と呼ばれるエンティティ (オブジェクト) があります。これは、「命名規則」と呼ばれる別のエンティティで定義されている厳密な命名規則に従う必要があります。ユーザーが値を入力すると、システムはそれを NamingConvention エンティティで確立された規則に照らしてチェックし、必要に応じてエラーを返す必要があります。

この検証はどこで、どのように行うべきですか? 検証を行うときに NamingConvention エンティティを確認する必要があります。つまり、別のエンティティを参照しているため、データベース コンテキストが必要になります。新しいコンテキストを作成する必要のない検証方法はありますか? コントローラーは既にデータ コンテキストを作成しているので、コントローラーで検証を行うことを考えていましたが、これは適切な場所ではないようです。

助けてくれてありがとう!

4

2 に答える 2

1

名前が入力されている Web ページからの JQuery post (ajax) 呼び出しを使用して、このようなことを行いました。次に、(name の値) をコントローラーのメソッドに投稿します。このメソッドは、検証が成功したかどうかを示すフラグと、ユーザーに返したいメッセージを含む JSON 値を返すことができます。例えば ​​:

ウェブページの Javascript :

$("#name").change(function () {

var nameVal = $(this).val();

$.post(getRoot() + "/NameController/ValidateName", { name: nameVal },
function (data) {
    if (data.valid == "true") {
        alert("A valid name was chosen");
    } else
    {
        alert(data.message);
    }
}, "json");

});

コントローラー (NameController) コード:

 [HttpPost]
 public ActionResult ValidateName(string name)
 {
   // actual validation carried out in a static utility class (Utils.IsNameValid)
   // if you are loading the same validation rules from your table each time
   // consider caching the data in the application cache or a static List.

   bool nameIsValid = Utils.IsNameValid(name, out string ErrorMessage);

   JsonResult result = new JsonResult();

   result.Data = new { valid = (nameIsValid "true" : "false"), message = ErrorMessage };

   return result;


  }
于 2013-02-25T23:33:21.947 に答える
0

私はEF 5を使用していますが、この方法を使用できると信じています...この回答で誤解を招く場合は、事前に謝罪してください。

コンテキスト(またはコンテキストデコレータ)内で検証を行うことができます

public override int SaveChanges()
{
    var products = this.GetChangedProducts();

    foreach (var product in products)
    {
        this.ValidateName(product);
    }

    return base.SaveChanges();
}

private IEnumerable<Product> GetChangedProducts()
{
    return (
        from entry in _context.ChangeTracker.Entries()
        where entry.State != EntityState.Unchanged
        select entry.Entity)
        .OfType<Product>();
}

private void ValidateName(Product product)
{
    //validate here
}
于 2013-02-25T23:25:46.107 に答える