0

モデルに次のプロパティがあります。

[Display(Name = "ActivityModel_FlashFile", ResourceType = typeof(App_GlobalResources.Models))]
[Required(ErrorMessageResourceName = "ActivityModel_FlashFile_Required", ErrorMessageResourceType = typeof(App_GlobalResources.Models))]
public string FlashFile { get; set; }   

そして、私のコントローラーでは次のことを行います:

 ModelState.Remove("FlashFile");
 model.FlashFile = "1";
 try
 {
    this.UpdateModel(model);
 }
 catch (Exception ex)
 {
    string allErrors=string.Join(",",ModelState.Values.SelectMany(v => v.Errors).Select(e=>e.ErrorMessage));
 ...

(このスニペットの先頭に到達すると、FlashFile は空になります)。
それでも、この時点allErrorsで「Flashファイルが必要です」。

(私はここからそのようにするという考えを取りました)。

FlashFile プロパティの検証を回避するにはどうすればよいですか?

4

1 に答える 1

0

FlashFile プロパティの検証を回避するにはどうすればよいですか?

このビューの要件に適合するビュー モデルを使用する。それが正しいやり方です。プロパティが必要ない場合は、このアクションの属性FlashFileを持たないビュー モデルを設計します。Required

これにアプローチする間違った方法は、ドメイン モデルを再利用しようとし、モデル バインディングから不要なプロパティを除外することです。

try
{
    this.UpdateModel(model, null, null, new[] { "FlashFile" });
    model.FlashFile = "1";
}
catch (Exception ex)
{
    string allErrors = string.Join(
        ",", 
        ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage)
    );
    ...
}
于 2012-08-27T08:54:58.780 に答える