2012-06-20 17 views
1

盲目地覆盖绑定上下文的ModelMetaData来设置模型的类型是否安全?我担心可能会使用活页夹在编辑场景中更新预建模型,如果我只覆盖ModelMetaData,则会丢失数据。对IModelBinder.BindModel的调用是否已经设置了bindingContext.Model/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 

回答

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. 
} 
+0

有没有一种方法,以确认ModelMetadata是同类型的那GetSpecificModelTypeBasedOnBindingData(BindingContext中)将返回,如果没有抛出异常? –

+0

你可以比较'bindingContext.ModelMetadata.ModelType == GetSpecificModelTypeBasedOnBindingData(bindingContext)',我想。 – HackedByChinese

相关问题