Passing parameters to webmethod

9 posts, 0 answers
  1. Scott
    Scott avatar
    10 posts
    Member since:
    Jun 2012

    Posted 15 Jun 2012 Link to this post

    I am new to using the Kendo UI suite of products, and am going crazy trying to pass  a parameter to my c# webmethod.  I have everything up and running when I don't use the paramter, and data pulls, saves, etc. just fine.  But, when I try to pass the parameter, I get the error: 

    Invalid web service call, missing value for parameter: \u0027ageGroupID\u0027.

    The relevant code is below.  Note that this is just the most recent iteration of the code, as I have tried a lot of different ways to get this working, based on the information found in this forum, and elsewhere.

    I have set the variable many different ways.  The most recent was to pretty much set the json, but I have tried just setting the value I am passing, then setting the full json in the data: statement.

    var miniMiteAgeID = { 'ageGroupID': "11" };

    Here is my read statement:

    read: {
                        url: "AssociationStats.aspx/getPlayerInfo", //specify the URL which data should return the records. This is the Read method of the Products.asmx service.
                        contentType: "application/json; charset=utf-8", // tells the web method to serialize JSON
                        dataType: "json",
                        data: JSON.stringify(miniMiteAgeID),
                        type: "POST" //use HTTP POST request as the default GET is not allowed for web methods
     
                    },

    My webmethod is below...

    [WebMethod]
    public static IEnumerable<teamPlayers> getPlayerInfo(string ageGroupID)
    {
     
      //Do a bunch of stuff
     
    }

    Any help or suggestions you might have would be greatly appreciated.  I am at my wits end.

    Thanks,

    Scott
  2. Scott
    Scott avatar
    10 posts
    Member since:
    Jun 2012

    Posted 15 Jun 2012 Link to this post

    Just for added info:

    I have tried double quotes around ageGroupID and no quotes.  Same goes for 11.  I put a breakpoint at the beginning of my [webmethod] and it is not getting triggered, so the problem is happening as the json is being posted to the webmethod, or when the webmethod is trying to receive the post from the javascript...as the error indicates.
  3. Kendo UI is VS 2017 Ready
  4. Scott
    Scott avatar
    10 posts
    Member since:
    Jun 2012

    Posted 15 Jun 2012 Link to this post

    More info...I have found several examples of people doing the same thing that I am, and have tried all of their suggestions.  My confusion is that if I even pass a straight json string to my webmethod, I am still getting the same error.

    data: "{'ageGroupID':'11'}",

    Just seems like this should work, and nothing I do triggers even gets to the method where my breakpoint exists.

  5. Scott
    Scott avatar
    10 posts
    Member since:
    Jun 2012

    Posted 15 Jun 2012 Link to this post

    I figure I will just keep posting as I investigate further, in case it helps point someone in the right direction to get this working.

    Currently, I am trying it the following way, per another example that is almost identical to mine.  The webmethod is the same, and accepts ageGroupID as a string parameter. 
    [WebMethod]
    public static IEnumerable<teamPlayers> getPlayerInfo(string ageGroupID)

    When I run fiddler, I don't see that anything at all is being passed to the webmethod.  (unless I am reading the Fiddler results incorrectly) 
    POST /MemberPages/Pages/AssociationStats.aspx/getPlayerInfo HTTP/1.1
    Host: localhost:58034
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0
    Accept: application/json, text/javascript, */*; q=0.01
    Accept-Language: en-us,en;q=0.5
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Content-Type: application/json; charset=utf-8
    X-Requested-With: XMLHttpRequest
    Referer: http://localhost:58034/MemberPages/Pages/AssociationStats.aspx
    Cookie: __utma=111872281.1183024001.1319639472.1339695715.1339765348.233; __utmz=111872281.1319639472.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); SiteSettings=Username=dsyhcoach1; .ASPXAUTH=BEEAD6096F1AD7C1DB9F1A05786A54733C212D05B79F9F7C1A437A72EFDFA21D3A70C88FB616736836FE578BD14095511C302C59B6DDFC3C9717672B24F1A769802DD8C0A9457E5D8AFBEEA89CAF55EB1CE36B2493A6280F3AF1B4C96216C71F669CECBA0EB62D42504AADB9A95F6DA7C452F6E396202574116982E6318CBF48A453B6793C25D1B0768F73CA8E283F1C; __utmb=111872281.19.10.1339765348; ASP.NET_SessionId=evz2ffwdjn5ehn5ubpfoz4j3; __utmc=111872281
    Pragma: no-cache
    Cache-Control: no-cache
    Content-Length: 0


    var miniMiteAgeID = { 'ageGroupID': '11' };
     
    read: {
                        url: "AssociationStats.aspx/getPlayerInfo", //specify the URL which data should return the records. This is the Read method of the Products.asmx service.
                        contentType: "application/json; charset=utf-8", // tells the web method to serialize JSON
                        dataType: "json",
                        data: JSON.stringify(miniMiteAgeID),
                        type: "POST" //use HTTP POST request as the default GET is not allowed for web methods
                    },
  6. Scott
    Scott avatar
    10 posts
    Member since:
    Jun 2012

    Posted 15 Jun 2012 Link to this post

    After further inspection, I can say definitively that no json, or data at all is being passed in my POST.  I have no idea why this is the case.  Obviously, I am missing something simple, but I don't see what it could be...any ideas????
  7. Jerry T.
    Jerry T. avatar
    118 posts
    Member since:
    Jul 2012

    Posted 15 Jun 2012 Link to this post

    Scott,

    You should be using a parameterMap. Try something like this:

    //Declaring object for passing parameters
     
    options: {
        Id: null
    }
     
     
    //Defining the data source
     
    this.ItemsDataSource = new kendo.data.DataSource({
        transport: {
            create: {
                type: "POST",
                url: "../Services/Js/Service_Js.svc/InsertItem",
                contentType: "application/json; charset=utf-8",
                dataType: "json"
            },
            read: {
                type: "POST",
                url: "../Services/Js/Service_Js.svc/GetItems",
                contentType: "application/json; charset=utf-8",
                dataType: "json"
            },
            update: {
                type: "POST",
                url: "../Services/Js/Service_Js.svc/UpdateItem",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                complete: function(e) {
                    me.readItems();
                }
            },
            destroy: {
                type: "POST",
                url: "../Services/Js/Service_Js.svc/DeleteItem",
                contentType: "application/json; charset=utf-8",
                complete: function(e) {
                    me.readItems();
                }
            },
            parameterMap: function(options, operation) {
                switch (operation) {
                    case "read":
                        return JSON.stringify(options);
                        break;
     
                    case "destroy":
                        return JSON.stringify(options);
                        break;
     
                    case "create":
                    case "update":
                        return JSON.stringify(options);
                        break;
                }
            }
        },
        schema: {
            data: "d",
            model: {
                id: "Id",
                fields: {
                    Id: { editable: false, nullable: false },
                    Category: { editable: true, type: "string" },
                    Item: { editable: true, type: "string" },
                    CostPerUnit: { editable: true, type: "decimal" },
                    Units: { editable: true, type: "number" },
                    Cost: { editable: true, type: "number" }
                }
            }
        }
    });
     
     
    // read data into the data source from a web service
     
    this.ItemsDataSource.read({
        Id: 1   //Id value of 1...here's where you'd pass in your miniMiteAgeID
    });


    Jerry
  8. Scott
    Scott avatar
    10 posts
    Member since:
    Jun 2012

    Posted 18 Jun 2012 Link to this post

    Thanks a ton, Jerry.  I had the parameter map in there, but really didn't understand its purpose.  Your post made the light turn on, and I saw that I wasn't passing the parameters...that had been driving me crazy. 

    I did have one more question that I was hoping someone could give me direction on.  Basically, I have 14 grids on a page that all derive from a single datasource.  It looks like this:

    Age Group 1
       -  players
       -  goalies
    Age Group 2
       -  players
       -  goalies
    Etc.

    So, I am using tabstrips for the players and goalies in each age group using a filter in the datasource.  And, I am passing the ageGroupID to my webmethod to get just those in that age group.  BUT, this is causing me to have 14 datasources, which can be a bit difficult to maintain.  I am replacing asp.net datalists, and I was able to easily do the filtering in the code behind, but I can't figure out the best strategy for achieving the above, with less than 14 datasources.  For other reasons, it would make sense for me to have a goalie datasource, and a player datasource, then just filter somehow by ageGroupID on each grid, but I can't figure out how to do this.

    I might just be missing something obvious, but I am a bit new to javascript/Kendo.

    Thanks again for the help.

    Scott

    Does anyone have an idea of a strategy that would work in this instance?
  9. Scott
    Scott avatar
    10 posts
    Member since:
    Jun 2012

    Posted 18 Jun 2012 Link to this post

    FYI, I am currently using tabstrips to provide the player and goalie info in two separate grids within each age group.
  10. Scott
    Scott avatar
    10 posts
    Member since:
    Jun 2012

    Posted 20 Jun 2012 Link to this post

    I guess no one has any ideas...maybe the cumbersome way I am doing it is the only way to do it.

    Basically, I have a datasource for every grid, and each grid is really two grids, which utilize tabstrips to hide/show.  So, I have 14 datasources on the page.  I can now pass parameters to the webmethod, in order to limit the amount of data for each datasource, but it still seems like I should be able to create a datasource with the remote data, then derive/filter my other datasources from that datasource.
Back to Top
Kendo UI is VS 2017 Ready