来自jQuery.load()的参数未传递给Controller Action方法

时间:2011-10-30 22:21:18

标签: jquery asp.net-mvc-3

在我的MVC3视图中,我有一个链接到Model属性的文本框,如下所示:

 <tr> 
        <td>Name contains:</td> 
        <td>@Html.TextBoxFor(model => model.NameContains, new { @style = "width:99%" })</td> 
        <td>@Html.ImageButton("Search", "nameContainsSearchButton")</td> 
</tr> 

我的图像按钮用在一段脚本中,用于在控制器上调用返回局部视图的相应方法,如下所示:

<script type="text/javascript">
$(function () {
    $('#nameContainsSearchButton').click(function () {

        var data = $("#NameContains").val();

        // send an AJAX request to the controller action
        $('#searchResults').load("/QuickSearch/Search", data);

        return false;
    });
});

正如您所看到的,我正在尝试将TextBox的“NameContains”值作为参数传递给我的控制器方法。但是,该方法接收的参数始终为null。

任何人都知道我做错了什么?

提前致谢,

吕西安。

编辑:我通过将调用更改为:

来完成上述工作
$('#searchResults').load("/QuickSearch/Search", {nameContains: data});

其中nameContains是操作方法中参数的名称。

我有一个后续问题:如何将整个模型作为参数传递给动作方法?还有另一个页面,用户可以输入许多搜索条件,我想将整个搜索条件模型对象传递给控制器​​....

3 个答案:

答案 0 :(得分:3)

你做错了, 看看http://api.jquery.com/load/,你传递数据作为回调,应该在服务器响应后调用, 它应该是

$('#searchResults').load("/QuickSearch/",{Search: data});

答案 1 :(得分:1)

您可以将整个模型作为JSON请求发送:

var model = {
    nameContains: $('#NameContains').val(),
    someOtherPropertyName: 'some other value',
    someComplexObject: {
        complexProp1: 'value 1',
        complexCollectionProp: [ 1, 2, 3 ]
    }
};

$.ajax({
    url: '@Url.Action("Search", "QuickSearch")',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify(model),
    success: function(result) {
        $('#searchResults').html(result);
    }
});

答案 2 :(得分:0)

第二个参数'data'应具有键值格式,f.ex:

$("#objectID").load("test.php", { 'choices[]': ["Jon", "Susan"] } );

不只是价值。请参阅文档http://api.jquery.com/load/

中的第三个示例