使用WCF和JSONP插入剑道网格记录

使用WCF和JSONP插入剑道网格记录,wcf,jsonp,kendo-ui,Wcf,Jsonp,Kendo Ui,我有一个WCF服务,我在jsonp上配置它 我的模特是MoviesItem [DataContract] public class MoviesItem { [DataMember] public int MovieID { get; set; } [DataMember] public string MovieTitle { get; set; } [DataMember] public DateTime MovieReleseDate { ge

我有一个WCF服务,我在jsonp上配置它

我的模特是MoviesItem

[DataContract]
public class MoviesItem
{
    [DataMember]
    public int MovieID { get; set; }
    [DataMember]
    public string MovieTitle { get; set; }
    [DataMember]
    public DateTime MovieReleseDate { get; set; }
}
我的服务合同是IMOVEISERVICE

[ServiceContract]
public interface IMoviesService
{
    [WebGet( BodyStyle = WebMessageBodyStyle.Bare ,RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    IEnumerable<MoviesItem> GetMovies();

    [WebInvoke(Method = "POST",BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    void AddMovies(MoviesItem movies);

}
[WebGet(ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    void AddMovies(string jsonData);
我的剑道网格已从WCF以jsonp格式返回的数据中成功绑定,但当我单击“尝试使用剑道网格在数据库中插入记录”时,我始终会收到以下错误:

"NetworkError: 400 Bad Request - http://localhost:2382/KendoUiTest/MoviesService.svc/AddMovies?callback=jQuery17102623996303075524_1334611809600"

请有人帮我解决这个问题,我如何插入记录使用WCF。我在哪里做错了,我无法理解。

我已经发布了我找到的解决方案

JSONP不接受POST请求,这是主要问题 解决方法是像这样修改create函数和parametermap函数

var dataSource1 = new kendo.data.DataSource(
        {
            transport:
                {
                    read:
                        {
                            url: "MoviesService.svc/GetMovies",
                            dataType: "jsonp",

                            },
                    create:
                        {
                            url: "MoviesService.svc/AddMovies",
                            dataType: "jsonp",
                                                        },
parameterMap: function (data, operation) {
                    if (operation != "read") {
                        return { jsonData: kendo.stringify(data.models) };
                    }
                }
                },

            }, and so on ............
现在合同和服务功能都发生了这样的变化

var dataSource1 = new kendo.data.DataSource(
        {
            transport:
                {
                    read:
                        {
                            url: "MoviesService.svc/GetMovies",
                            dataType: "jsonp",

                            },
                    create:
                        {
                            url: "MoviesService.svc/AddMovies",
                            dataType: "jsonp",
                                                        },
parameterMap: function (data, operation) {
                    if (operation != "read") {
                        return { jsonData: kendo.stringify(data.models) };
                    }
                }
                },

            }, and so on ............
伊莫维耶斯酒店

[ServiceContract]
public interface IMoviesService
{
    [WebGet( BodyStyle = WebMessageBodyStyle.Bare ,RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    IEnumerable<MoviesItem> GetMovies();

    [WebInvoke(Method = "POST",BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    void AddMovies(MoviesItem movies);

}
[WebGet(ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    void AddMovies(string jsonData);
现在MoviesService类将具有上述函数实现

public IEnumerable<MoviesItem> AddMovies(string jsonData)
    {
        using (var context = new MovieCollectionDataContext())
        {

            var movies = JArray.Parse(jsonData);
            foreach (var item in movies)
            {
                var movie = new Movie()
                {
                    Title = item["MovieTitle"].ToString(),
                    ReleaseDate = DateTime.Parse(item["MovieReleseDate"].ToString())
                };
                context.Movies.InsertOnSubmit(movie);
                context.SubmitChanges();
            }


            return context.Movies.Select(e => new MoviesItem()
            {
                MovieID = e.ID,
                MovieTitle = e.Title,
                MovieReleseDate = e.ReleaseDate

            }).Take(50).ToList();

        }
    }
public IEnumerable AddMovies(字符串jsonData)
{
使用(var context=new MovieCollectionDataContext())
{
var movies=JArray.Parse(jsonData);
foreach(电影中的var项)
{
var movie=新电影()
{
Title=项目[“MovieTitle”]。ToString(),
ReleaseDate=DateTime.Parse(项[“MoviereleState”].ToString())
};
context.Movies.InsertOnSubmit(电影);
context.SubmitChanges();
}
返回context.Movies.Select(e=>newMoviesItem()
{
电影ID=e.ID,
电影标题,
moviereleastate=e.ReleaseDate
}).取(50.ToList();
}
}

现在与JSONP和剑道一起享受WCF。。。。。。。。这太棒了

我已经发布了我的解决方案

JSONP不接受POST请求,这是主要问题 解决方法是像这样修改create函数和parametermap函数

var dataSource1 = new kendo.data.DataSource(
        {
            transport:
                {
                    read:
                        {
                            url: "MoviesService.svc/GetMovies",
                            dataType: "jsonp",

                            },
                    create:
                        {
                            url: "MoviesService.svc/AddMovies",
                            dataType: "jsonp",
                                                        },
parameterMap: function (data, operation) {
                    if (operation != "read") {
                        return { jsonData: kendo.stringify(data.models) };
                    }
                }
                },

            }, and so on ............
现在合同和服务功能都发生了这样的变化

var dataSource1 = new kendo.data.DataSource(
        {
            transport:
                {
                    read:
                        {
                            url: "MoviesService.svc/GetMovies",
                            dataType: "jsonp",

                            },
                    create:
                        {
                            url: "MoviesService.svc/AddMovies",
                            dataType: "jsonp",
                                                        },
parameterMap: function (data, operation) {
                    if (operation != "read") {
                        return { jsonData: kendo.stringify(data.models) };
                    }
                }
                },

            }, and so on ............
伊莫维耶斯酒店

[ServiceContract]
public interface IMoviesService
{
    [WebGet( BodyStyle = WebMessageBodyStyle.Bare ,RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    IEnumerable<MoviesItem> GetMovies();

    [WebInvoke(Method = "POST",BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    void AddMovies(MoviesItem movies);

}
[WebGet(ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    void AddMovies(string jsonData);
现在MoviesService类将具有上述函数实现

public IEnumerable<MoviesItem> AddMovies(string jsonData)
    {
        using (var context = new MovieCollectionDataContext())
        {

            var movies = JArray.Parse(jsonData);
            foreach (var item in movies)
            {
                var movie = new Movie()
                {
                    Title = item["MovieTitle"].ToString(),
                    ReleaseDate = DateTime.Parse(item["MovieReleseDate"].ToString())
                };
                context.Movies.InsertOnSubmit(movie);
                context.SubmitChanges();
            }


            return context.Movies.Select(e => new MoviesItem()
            {
                MovieID = e.ID,
                MovieTitle = e.Title,
                MovieReleseDate = e.ReleaseDate

            }).Take(50).ToList();

        }
    }
public IEnumerable AddMovies(字符串jsonData)
{
使用(var context=new MovieCollectionDataContext())
{
var movies=JArray.Parse(jsonData);
foreach(电影中的var项)
{
var movie=新电影()
{
Title=项目[“MovieTitle”]。ToString(),
ReleaseDate=DateTime.Parse(项[“MoviereleState”].ToString())
};
context.Movies.InsertOnSubmit(电影);
context.SubmitChanges();
}
返回context.Movies.Select(e=>newMoviesItem()
{
电影ID=e.ID,
电影标题,
moviereleastate=e.ReleaseDate
}).取(50.ToList();
}
}
现在与JSONP和剑道一起享受WCF。。。。。。。。太棒了