【问题标题】:Parameters from jQuery.load() not passed to Controller Action method来自 jQuery.load() 的参数未传递给 Controller Action 方法
【发布时间】:2011-10-30 22:21:18
【问题描述】:

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

 <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 是操作方法中的参数名称。

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

【问题讨论】:

  • 渲染出来的 HTML 是什么样子的?

标签: jquery asp.net-mvc-3


【解决方案1】:

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

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

【讨论】:

  • 是的,你是对的。在我阅读您的答案之前,我想出了一个。但是,在我的情况下,我似乎不需要方法名称作为参数(该方法将返回部分视图)。关于我的后续问题的任何想法(见编辑)?
【解决方案2】:

您可以将整个模型作为 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);
    }
});

【讨论】:

  • 这看起来很有希望。我想我不需要你的第一个代码 sn-p 因为我页面其余部分的(Razor)代码已经更新了模型。在这种情况下,我的控制器方法的签名会是什么样子 - 特别是参数的类型?我还会返回 PartialView 吗?
  • @LucienDol,在这种情况下,该操作将采用一个代表您的视图模型的参数。它将具有与下面定义的 javascript 对象相同的属性:nameContainssomeOtherPropertyNamesomeComplexObject(带有complexProp1complexCollectionProp)。就返回类型而言,这完全取决于您要实现的目标。可能是部分视图,还有另一个 JSON 对象、XML 等...
  • 所以这不一定是JSON参数类型(如果存在这样的东西)?
  • @LucienDol,不,一个普通的 POCO 对象。
  • @LucienDol,您订阅了按钮的 .click 事件处理程序:$('#id_of_your_button').click(function() { ... });
【解决方案3】:

第二个参数'data'应该是key-value格式,f.ex:

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

不仅仅是价值。请参阅文档中的第三个示例http://api.jquery.com/load/

【讨论】:

  • 是的,你是对的。在我阅读您的答案之前,我想出了一个。关于我的后续问题的任何想法(见编辑)?
猜你喜欢
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多