0

コントローラー内の作成および編集メソッドでデータベースに保存する前に、重複をチェックする必要があります。次に、一般的なエラー メッセージではなく、重複したエラー メッセージを表示する必要があります。

重複の私の定義は、ユーザー ID + Code1ID + Code2ID + Code3ID + Code4ID です。

質問: 上記の値の組み合わせが既に存在する場合、重複をチェックするにはどうすればよいですか?

テーブル名

 Character:
CharacterID int 
UserID int
Code1ID int
Code2ID int
Code3ID int
Code4ID int
Name Varchar(40)

私の主キーは、UserID + Code1ID + Code2ID + Code3ID + Code4ID で構成されています。これにより、重複がデータベースに入力されないことが保証されます。しかし、私が返すエラー メッセージは一般的なエラー メッセージです。

最初に重複をチェックしてから、重複のみに基づいて警告メッセージまたはエラー メッセージを返す必要があります。

コントローラー内の編集メソッドは次のとおりです

  //
        // GET: /Character/Edit/5

        public ActionResult Edit(int id)
        {
            Character character = db.Characters.Find(id);
        PopulateUserIDDropDownList(character.UserID);
            PopulateCode1IDDropDownList(character.Code1ID);
            PopulateCode2IDDropDownList(character.Code2ID);
            PopulateCode3IDDropDownList(character.Code3ID);
            PopulateCode4IDDropDownList(character.Code4ID);
            return View(character);
        }

        //
        // POST: /Character/Edit/5

        [HttpPost]
        public ActionResult Edit(Character character)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    db.Entry(character).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
            }
            catch
            {
                ModelState.AddModelError("", "Generic Error. Unable to save changes. Try again, and if the problem persists, see your system administrator.");
            }
        PopulateUserIDDropDownList(character.UserID);
            PopulateCode1IDDropDownList(character.Code1ID);
            PopulateCode2IDDropDownList(character.Code2ID);
            PopulateCode3IDDropDownList(character.Code3ID);
            PopulateCode4IDDropDownList(character.Code4ID);
            return View(character);
        }

コントローラー内の作成メソッドは次のとおりです

    //
    // GET: /Character/Create

    public ActionResult Create()
    {
    PopulateUserIDDropDownList();
        PopulateCode1IDDropDownList();
        PopulateCode2IDDropDownList();
        PopulateCode3IDDropDownList();
        PopulateCode4IDDropDownList();
        return View();
    } 

    //
    // POST: /Character/Create

    [HttpPost]
    public ActionResult Create(Character character)
    {
        try
        {
            if (ModelState.IsValid)
            {
                db.Characters.Add(character);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
        }
        catch
        {
            ModelState.AddModelError("", "Generic Error.Unable to save changes. Try again, and if the problem persists, see your system administrator.");
        }
    PopulateUserIDDropDownList(character.UserID);
        PopulateCode1IDDropDownList(character.Code1ID);
        PopulateCode2IDDropDownList(character.Code2ID);
        PopulateCode3IDDropDownList(character.Code3ID);
        PopulateCode4IDDropDownList(character.Code4ID);
        return View(character);
    }

モデル

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;


namespace myproject.Models
{
    public class Character
    {
        [Key]
        public int CharacterID { get; set; }

        [Required(ErrorMessage = "User is required.")]
        [Display(Name = "User")]
        public Guid UserId { get; set; }

        [Required(ErrorMessage = "Code1 is required.")]
        [Display(Name = "Code1")]
        public int Code1ID { get; set; }


        [Required(ErrorMessage = "Code2 is required.")]
        [Display(Name = "Code2")]
        public int Code2ID { get; set; }

        [Required(ErrorMessage = "Code3 is required.")]
        [Display(Name = "Code3")]
        public int Code3ID { get; set; }

        [Required(ErrorMessage = "Code4 is required.")]
        [Display(Name = "Code4")]
        public int Code4ID { get; set; }

        [Required(ErrorMessage = "level is required.")]
        [Display(Name = "Level")]
        public int LevelID { get; set; }

        public virtual aspnet_Users Aspnet_User { get; set; }
        public virtual Code1 Code1 { get; set; }
        public virtual Code2 Code2 { get; set; }
        public virtual Code3 Code3 { get; set; }
        public virtual Code4 Code4 { get; set; }

    }
}
4

2 に答える 2

5

remote重複をチェックする列に属性を追加する必要があります。ここで例を見ることができます。こちら で説明されているロジックに応じて、エラー メッセージをカスタマイズすることもできます。完全なキーを持つビューモデルに別のフィールドを追加してから、それにリモート属性を追加する必要がある場合があります。単一のメッセージが必要な場合は、ここで説明するカスタム モデル バインダーが必要になる場合があります。または上記のように、キーの連結値を含む別のフィールドを追加し、そのフィールドにリモート属性を追加して有効にしますvalidationsummary

于 2012-07-05T20:11:11.580 に答える
3

DBに保存する前に...これらの値でDBを検索してください...何かが見つかった場合...重複があり、正しいメッセージを表示できます。

編集中は、現在編集中のオブジェクトをクエリから除外する必要があります。

これらの ID を WHERE 部分としてリポジトリで Count() を実行できます...結果が 1 以上の場合...重複があります。

于 2012-07-05T20:33:09.857 に答える