【发布时间】:2013-10-28 14:51:12
【问题描述】:
我已经在我的文件上传操作中实现了自定义模型绑定器。有时文件上传会被服务器丢弃,并且使用部分数据调用 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)
{
}
【问题讨论】:
-
为什么要中止模型绑定器中的动作执行?您可以简单地通知您的文件未正确上传:
ModelState.AddModelError(errorMessage, new [] { fileName });在您的模型活页夹中,然后在您的操作中测试ModelState.IsValid。
标签: asp.net-mvc-3 model-binding