0

MVC3アプリケーションに「作成」ページがあり、すべて必須の4つの入力フィールドがあります。また、これら4つのフィールドのうち3つを編集できる「編集」ページもあります。4番目のフィールドを表示せず、初期値を維持したい(フィールドはエントリが作成された日付です)。

モデルで4番目のフィールドを[必須]としてマークすると、編集フィールドのアクション後のメソッドでモデルが無効として宣言されます。[必須]アノテーションを省略すると、誰かがこの4番目のフィールドにnull値を持つユーザーを作成できます。

この問題を回避するにはどうすればよいですか?

作成 編集

モデルコード:

    [Required]
    [DisplayName("User Name")]
    public string UserName { get; set; }

    [Required]
    public string Role { get; set; }

    [Required]
    [DataType(DataType.Date)]
    [DisplayName("Insert Date")]
    public DateTime? InsertDate { get; set; }

    [Required]
    [DisplayName("Active")]
    public bool ActiveInd { get; set; }

コントローラーコード:

public ActionResult Edit(int id, ZUserRoleModel mod)
    {

        if (ModelState.IsValid)
        {

            // code removed

            return RedirectToAction("Index");
        }
        return View(mod);

    }
4

3 に答える 3

1

そのフィールドを編集モードで非表示にすることができます。

@Html.HiddenFor(x => x.EntryDate)
于 2012-07-13T14:03:33.233 に答える
1

これに対する回答がまだ必要かどうかはわかりませんが、

@Html.HiddenFor(x => x.EntryDate )

機能するには、既存のモデルをビューに渡します。したがって、ユーザー データを取得するためのアクションが次のようになっていると仮定しましょう。(あなたはそれを提供しなかったので、これが正しいかどうかはわかりません)

Public ActionResult GetUser(int UserID)
{
    ZUserRoleModel model = new ZUserRoleModel(UserID); 
    // Maybe this could go to your database and gather user
    // It would populate the correct data into a model object

    return View("Edit", model);
}

非表示フィールドを組み合わせると、ビューに既存のユーザー情報が入力され、非表示フィールドにデータが入力され、編集アクションに渡されます。

注: 私はこれをテストせずに書きましたが、それでも機能するはずです。少なくとも、まだ支援が必要な場合は、正しい方向に向けられることを願っています.

于 2013-01-08T19:55:51.147 に答える
0

fluentvalidation を使用できます: http://fluentvalidation.codeplex.com/

次のようなルールがあります

RuleFor(user => user.field4).NotEmpty().When(ViewContext.Controller.ValueProvider.GetValue("action").RawValue <> "edit") 
于 2012-07-13T14:08:45.443 に答える