在BindModel方法中中止操作

时间:2013-10-28 14:51:13

标签: asp.net-mvc-3 model-binding

我在文件上传操作中实现了自定义模型绑定器。有时文件上传被服务器删除,而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)
{
}

1 个答案:

答案 0 :(得分:0)

这不是您想要从模型绑定中做的事情 模型绑定不应该控制逻辑行为。它没有意义。
我建议在控制器中,你会询问某些东西是否为空并将适当的结果返回给客户端 让模型绑定做控制器的工作是不对的。