如何在asp mvc模型绑定器中读取ajax参数

时间:2015-06-12 07:55:38

标签: asp.net-mvc angularjs

我有角度服务:

statistics.factory('getData', function ($http) {
return {
    result: function (url, date) {
        return $http({
            method: 'POST',
            url: url,
            data: {
                date: date
            }
        });
    }
};});

此服务发送给MVC控制器日期参数。

我想在MVC模型中看到数据参数。

我试过了:

 public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var request = controllerContext.HttpContext.Request;

        var date = request["date"];
        var date1 = request.Form.Get("date");
        var date3 = new StreamReader(request.InputStream);
        var requestFromPost = date3.ReadToEnd();

    }

但我总是得到零值。

这是我的模型活页夹:

public class DataBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var request = controllerContext.HttpContext.Request;
        var date = request.QueryString["date"];

        return date;
    }

和行动

[HttpPost]
public ActionResult GetStatisticsData([ModelBinder(typeof(DataBinder))] DataA dataA)

}

1 个答案:

答案 0 :(得分:0)

对于您的第一个BindModel实现,您没有返回任何对象,因此它无效,第二个有效,但您尝试从错误的集合中获取date值它应该是Form而不是QueryString,并且当您在Action中的绑定期望类型object时,也会返回DataA。所以它应该是什么(不包括必要的检查和本地化):

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
    var date = DateTime.Parse(controllerContext.HttpContext.Request.Form["date"]);
    return new DataA 
    {
        SomeDate = date
    };
}

此外,我根据您的问题here发布了一个解决方案,您会看到它正在运行。我使用jquery而不是angular来快速回答,但请求与$ http相同。希望它可以帮助你并询问是否还有其他问题。