2013-10-28 58 views
0

我在文件上傳操作中實現了自定義模型聯編程序。有時文件上傳被服務器丟棄,並且BindModel方法被部分數據調用(ContentLenght和TotalBytes在這裏不匹配)。我想中止自定義模型綁定的動作執行,該怎麼做?在BindModel方法中中止操作

public class OptionModelBinder : DefaultModelBinder 
    { 
     public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
     { 
      var optionModelName = GetOptionModelName(controllerContext); 
      if (optionModelName != null) return null// !!!How to abort Action execution?!!! here 

       Trace.TraceInformation(optionModelName); 
       var model = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(optionModelName); 
       bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType()); 

      return base.BindModel(controllerContext, bindingContext); 
     } 

public class OptionModelBinderAttribute : CustomModelBinderAttribute 
{ 

    public override IModelBinder GetBinder() 
    { 
     return new OptionModelBinder(); 
    } 
} 

[HttpPost] 
public ActionResult UploadFile(IEnumerable<HttpPostedFileBase> clientUpload, [OptionModelBinder]IOptionViewModel formData) 
{ 
} 
+0

爲什麼要從模型聯編程序中止操作執行?您可以簡單地通知您的文件沒有正確上傳:ModelState.AddModelError(errorMessage,new [] {fileName});'在您的模型聯編程序中,然後在您的操作中測試'ModelState.IsValid'。 –

回答

0

這是不是你想要從模型結合做一些事情。
模型綁定不應該控制邏輯行爲。它沒有任何意義。
我建議在控制器中,你會問是否有空,並返回適當的結果給客戶端。
讓模型綁定執行控制器的工作是不對的。