4

モデルのパラメーターを定義した後

[Required(AllowEmptyStrings = false, ErrorMessage = "No null")]
[DisplayName("Name")]
public string Name { get; set; }

特定のビューのこのパラメータのプロパティを変更することは可能ですか? たとえば、これらのプロパティ (必要なプロパティ) を view1、view2、および view3 に対して保持し、view4 に対しては保持しないようにします。view3 でこのプロパティを無効にすることはできますか?

4

1 に答える 1

6

特定のビューのこのパラメータのプロパティを変更することは可能ですか?

いいえ、属性はコンパイル時にアセンブリに焼き付けられます。

これを行う正しい方法は、ビュー モデルを使用することです。

public class CreateViewModel
{
    [DisplayName("Name")]
    public string Name { get; set; }
}

public class EditViewModel
{
    [Required(AllowEmptyStrings = false, ErrorMessage = "No null")]
    [DisplayName("Name")]
    public string Name { get; set; }
}

2 つのビューからフォームを送信するときに呼び出されるそれぞれのコントローラー アクションは、ビュー モデルで動作します。

public ActionResult Create(CreateViewModel model)
{
    ... the name will not be required here
    if (ModelState.IsValid)
    {

    }
}


public ActionResult Edit(EditViewModel model)
{
    ... the name will be required here
    if (ModelState.IsValid)
    {

    }
}

別のアプローチには、カスタム モデル バインダーまたは実装IValidatableObjectインターフェイスが含まれ、現在のアクションに基づいて何らかの動的検証を行います。一言で言えば、あなたは深淵に向かっています。個人的には、これは私が台無しにするものではありませんが、私の推奨する解決策が気に入らない場合は、その方向を自由に探索してください。

于 2013-01-15T22:55:08.707 に答える