Параметры из jQuery.load () не передаются в метод действия контроллера - PullRequest
2 голосов
/ 31 октября 2011

В моем представлении 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> 

Кнопка My Image используется в фрагменте скрипта для вызова соответствующего метода на контроллере, который возвращает частичное представление, например так:

<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' в качестве параметра моему методу контроллера. Однако параметр, полученный методом, всегда равен нулю.

Кто-нибудь знает, что я делаю не так?

Заранее спасибо,

Люсьен.

РЕДАКТИРОВАТЬ: я получил вышеупомянутый рабочий, изменив вызов на:

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

где nameContains - имя параметра в методе действия.

У меня есть дополнительный вопрос: как я могу передать всю Модель в качестве параметра методу действия? Есть еще одна страница, где пользователь может ввести множество критериев поиска, и я хочу просто передать весь объект модели критериев поиска контроллеру ...

Ответы [ 3 ]

3 голосов
/ 31 октября 2011

Вы делаете это неправильно, посмотрите на http://api.jquery.com/load/, вы передали данные как обратный вызов, который должен быть вызван после ответа сервера, он должен быть

$('#searchResults').load("/QuickSearch/",{Search: data});
1 голос
/ 31 октября 2011

Вы можете отправить всю модель в виде запроса 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);
    }
});
0 голосов
/ 31 октября 2011

Второй параметр 'data' должен иметь формат значения ключа, например:

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

Не только значение.Смотри третий пример в документации http://api.jquery.com/load/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...