将对象传递给Controller Action

时间:2010-05-08 00:17:36

标签: asp.net-mvc vb.net

我正在尝试使用jQuery对MVC控制器操作执行$ .post()。这是jQuery调用:

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));
}

这是控制器动作:

    <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

问题是,MyAction的“authTicket”参数全是空的。第二个“dateRange”参数填充得很好。我很确定这个问题源于jQuery将数据转换为键/值对,以POST为动作。 MVC必须不理解格式,至少当它是具有自己属性的对象时。

jQuery转换为的名称/值对格式如:

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

反过来将其转换为x-www-form-urlencoded'd数据:

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

我想在我的行动中我总是可以拥有“用户名”和“密码”属性,但这对我来说似乎不对。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

尝试将您的操作签名更改为:

Function MyAction(ByVal username As string, password as string, ByVal dateRange As String) As ActionResult