views:

33

answers:

1

I'm attempting to use jQuery to do a $.post() to an MVC controller action. Here's the jQuery calls:

var _authTicket = { username: 'testingu', password: 'testingp' };

function DoPost() {    
    var inputObj = { authTicket: _authTicket, dateRange: 'ThisWeek' };            
    $.post('/MyController/MyAction', inputObj, PostResult);
}

function PostResult(data) {
    alert(JSON.stringify(data));
}

Here's the controller action:

    <HttpPost()> _
    Function MyAction(ByVal authTicket As AuthTicket, ByVal dateRange As String) As ActionResult
        Dim u = ValidateUser(authTicket)
        If u Is Nothing Then Throw New Exception("User not valid")

        ' etc..

    End Function

The problem is, MyAction's "authTicket" parameter is all empty. The second "dateRange" parameter gets populated just fine. I'm pretty sure that the issue stems from jQuery turning the data into key/value pairs to POST to the action. MVC must not understand the format, at least when it's an object with it's own properties.

The name/value pair format that jQuery is converting to is like:

authTicket[username] = "testingu"
authTicket[password] = "testingp"

Which in turn gets made into x-www-form-urlencoded'd data:

authTicket%5Busername%5D=testingu
&authTicket%5Bpassword%5D=testingp

I guess I could always have "username" and "password" properties in my actions, but that seems wrong to me. Any help would be appreciated.

A: 

Try changing your action signature to:

Function MyAction(ByVal username As string, password as string, ByVal dateRange As String) As ActionResult
Steve Horn
This is what I'm doing for the time being, but it seems weird/wrong that I can't just pass in an entire object.
Nicholas H