在我的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
是操作方法中参数的名称。
我有一个后续问题:如何将整个模型作为参数传递给动作方法?还有另一个页面,用户可以输入许多搜索条件,我想将整个搜索条件模型对象传递给控制器....
答案 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/
中的第三个示例