控制器上下文不包含自定义模型绑定器中的视图模型数据

时间:2017-03-17 15:01:45

标签: c# ajax asp.net-mvc data-annotations model-binding

我尝试为单个操作方法覆盖默认模型绑定器。不幸的是,当我使用ajax post请求调用它时,控制器的上下文对象不包含模型的数据。 这是我的js代码:

            $http.post(url.GetProducts, { productSearchViewModel: model.criteria) }).success(function(data, status) {
                    if (data.Error == null) {
                        // some code
                    }
                }).finally(function() {
                    // some code
                });

我的控制器操作方法:

    [HttpPost]
    [AuthorizeOperation(OperationName = "GetProducts")]
    public ActionResult GetProducts([JsonBinder]ProductViewModel productSearchViewModel)
    {
            if (ModelState.IsValid)
               // some code
    }

自定义模型绑定器代码:

public class JsonBinderAttribute : CustomModelBinderAttribute
{
    public override IModelBinder GetBinder()
    {
        return new JsonModelBinder();
    }

    public class JsonModelBinder : IModelBinder
    {
        public object BindModel(
            ControllerContext controllerContext,
            ModelBindingContext bindingContext)
        {
            try
            {
                var json = controllerContext.HttpContext.Request
                           .Params[bindingContext.ModelName];

                if (String.IsNullOrEmpty(json))
                    return null;

                // Swap this out with whichever Json deserializer you prefer.
                return Newtonsoft.Json.JsonConvert
                       .DeserializeObject(json, bindingContext.ModelType);
            }
            catch
            {
                return null;
            }
        }
    }
}

删除JsonBinder属性后,将正确填充productSearchViewModel值。如果我离开并调试它,BindModel方法中的json总是为空。

任何想法我做错了什么?

谢谢!

0 个答案:

没有答案