.NET MVC JSON to Web Service to JSON to Controller

In the JavaScript, notice arg.d contains the List<Fixtures> object and its 13 values.I have a text box in my "/Shared/_Layout.cshtml" page (so, obviously, this appears on every page of the Website) and I am having a heck of a time tyring to accomplish the following.

I'm sure I'm missing something, but if anyone can help that'd be great.

So, the user inputs text into the text box for searching purposes. When the user clicks "enter", a JavaScript function is called that, in turn, calls a Web Service.

The Web Service takes the inputted text and gets the results in a List<Fixtures>.

Here is the JavaScript:
function submitSearch(text) {
    var params = "{'text':'" + text + "'}";

    $.ajax({
        type: "POST",
        url: "/Services/Search.asmx/SearchProducts",
        data: params,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (arg) { searchSuccess(arg, text); },
        error: function () { alert("An Error Occured Retrieving the Data."); }
    });
}

Open in new window

Here is the Web Service:
[WebMethod]
public List<Fixtures> SearchProducts(string text)
{
    Session sh = SessionHelper.GetSessionObject();
    List<Fixtures> myFixtures = SearchLogic.GetSearchResults(sh.BrandObject, text);
    sh = null;

    if (myFixtures != null && myFixtures.Count > 0)
    {
        List<Fixtures> nonDupes = myFixtures.GroupBy(x => x.Name).Select(y => y.First()).ToList();
        if (nonDupes != null && nonDupes.Count > 0) myFixtures = nonDupes;
        nonDupes = null;
    }

    return myFixtures;
}

Open in new window

Then the "searchSuccess()" javascript function gets called. In that function, I want to pass the returned value from the Web Service (now stored in "arg.d") and send it to a Controller.

Here is the searchSuccess() function:
function searchSuccess(arg, text) {
    var params = "{'myFixtures':'" + arg.d + "'}";

    $.ajax({
        type: "POST",
        url: "/Products/Search",
        data: params,
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    });
}

Open in new window

This is where the issue is happening.

In the attached image at the top of the page, you will notice that in the searchSuccess() function, arg.d does have the List<Fixtures> object and its 13 Fixtures objects that are in the List.

However, when I try to send that to the Controller, you'll notice the object gets sent over but the object is empty (see 2nd attached image (mvc2.gif) at the bottom of the page).

Here is the Controller:
public ActionResult Search(List<Fixtures> myFixtures)
{
    if (myFixtures != null && myFixtures.Count > 0) return View("Fixtures", myFixtures.ToPagedList(0, 1000));
    else return View();
}

Open in new window


Any idea why it won't pass the entire object through and how would I go about doing this?
mvc2.gif
infotechelgAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

leakim971PluritechnicianCommented:
arg.d is a JSON object
you're trying to embed it in a string with your code :
var params = "{'myFixtures':'" + arg.d + "'}";

Open in new window


It's not possible.
Two ways :
- first one :
Convert arg.d to a string like this : JSON.stringify( arg.d )
Please note JSON.Stringify is only available on "recent" browsers, you can embed this small json.js script in your page to let every browser able to use it.

- second way (look more appropriate for your current controller):
var params = { "myFixtures" : arg.d };

Open in new window

0
infotechelgAuthor Commented:
leakim:

Thanks for the reply. I tried the JSON.stringify(arg.d) suggestion and i'm still getting a count of "0" when the varabile gets to my controller. (I also included that .js file you linked to)

When I tried the 2nd way, "var params = { "myFixtures" : arg.d };", the controller didn't even get called.
0
leakim971PluritechnicianCommented:
could you confirm List<Fixtures> match with the array of object arg.d ?

could you post it?
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

leakim971PluritechnicianCommented:
a JSON example (or a link to your page) and the Fixtures object
0
infotechelgAuthor Commented:
it does match. Notice the Web Service method is returning List<Fixtures> back to the JSON.
0
infotechelgAuthor Commented:
Well, i didn't find the solution, but I changed how I preformed the search. Instead of doint a web service call via JSON in my JavaScript, I just posted Form tags around the search box and had the controller handle the search directly.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
infotechelgAuthor Commented:
changed how I did it so I could get it to work.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
ASP.NET

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.