我在文件上传操作中实现了自定义模型绑定器。有时文件上传被服务器删除,而BindModel方法被调用部分数据(ContentLenght和TotalBytes在这里不匹配)。我想从自定义模型绑定器中止Action执行,怎么做?
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 :(得分:0)
这不是您想要从模型绑定中做的事情
模型绑定不应该控制逻辑行为。它没有意义。
我建议在控制器中,你会询问某些东西是否为空并将适当的结果返回给客户端
让模型绑定做控制器的工作是不对的。