1

モデルの型を設定するためにバインディング コンテキストの ModelMetaData をやみくもに上書きしても安全ですか? 編集シナリオでビルド済みモデルを更新するためにバインダーが使用される可能性があり、ModelMetaData を上書きするとデータが失われるのではないかと心配しています。

サンプルコード:

Public Class CustomModelBinder
    Inherits DefaultModelBinder

    Public Overrides Function BindModel(ByVal controllerContext As ControllerContext, ByVal bindingContext As ModelBindingContext) As Object
        bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(Nothing, GetSpecificModelTypeBasedOnBindingData(bindingContext))

        Return MyBase.BindModel(controllerContext, bindingContext)
    End Function
End Class
4

1 に答える 1

1

はい、モデルがすでに指定されている可能性があります。これは、たとえば、ここに示すように、誰かがTryUpdateModel/を使用して既存のモデルを更新しようとしたときに発生UpdateModelします。

public ActionResult Update(int id)
{
   var modelToUpdate = GetExistingModel(id);

   if (TryUpdateModel(modelToUpdate)) // replacing the Model or ModelBinderContext.Metadata in the model binder could have unexpected and unwanted results.
   {
      // etc.
   }

   // etc.
}
于 2012-06-20T11:47:12.140 に答える