Публикация данных в том же виде с использованием данных Jquery и Json MVC2 - PullRequest
0 голосов
/ 28 июля 2011

Это очень простой вопрос, я думаю, что здесь я задаю очень сложные вопросы, на которые они никогда не получают ответа ... Позвольте мне разбить его на его самые простые возможные компоненты и поработать оттуда ... У меня есть представление, которое требует ввода информации о пользователе в ... при отправке, это представление вызывает контроллер, который выдаст мне данные, которые мне нужно будет вернуть в то же самое представление ... Как я могу получить это данные возвращаются в мое представление без повторного вызова того же представления в конце выполнения контроллера ...?

Вот что у меня есть (функция Jquery) ...

     $(function () {
    $("#DemoGraphSubmit").click(function (e) {
        e.preventDefault();
        var data = [];
        $.getJSON("/PatientACO.aspx/SearchByDemographic", null, function (data) {
            data = $.map(data, function (item, a) {
                return "<option value=" + item.Value + ">" + item.Text + "</option>";
            });
            $("#PatientListToAdd").html(data.join(""));
        });
    });
});

кнопка отправки и выбор списка, который я хочу заполнить

    <div >
    <select id="PatientListToAdd">Add Patient</select>
    </div>

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Вы используете запрос GET вместе с данными JSON, так что, во-первых, вы должны разрешить это, используя JsonRequestBehavior.AllowGet.Допустим, у вас есть PatientACOController с SearchByDemographic действием

public class PatientACOController : Controller
{
    public ActionResult SearchByDemographic() 
    {  
        // code to get patients (hopefully you have something similar)
        // Patient class has Text and Value Properties
        IEnumerable<Patient> patients = PatientRepository.All()

        return Json(patients, JsonRequestBehavior.AllowGet);
    }

}

Ваш код jQuery выглядит нормально.Вы отправляете ноль для данных.Какой-то тихий голос в моей голове говорит, что, если вы не собираетесь отправлять данные, вы должны использовать пустой объект или вообще его опустить.Итак

$(function () {
    $("#DemoGraphSubmit").click(function (e) {
        e.preventDefault();
        var options = [];
        $.getJSON("/PatientACO/SearchByDemographic", function (data) {
            options = $.map(data, function (item, i) {
                          return "<option value=" + item.Value + ">" + item.Text + "</option>";
                      });
            $("#PatientListToAdd").html(options.join(""));
        });
    });
});
1 голос
/ 29 июля 2011

Хотя мой пример не совсем имитирует ваш дизайн (возможно, вы используете метод страницы или некоторую сомнительную маршрутизацию), но пока /PatientACO.aspx/SearchByDemographic возвращает JSON, вы должны иметь возможность применять этот код.Заполните коллекцию List<ListItem> вашими данными по мере необходимости и верните JSON.

Я добавил действие под названием SearchByDemographic, и вы увидите, что ниже в моем jQuery я использую его вместо вашего URL.Тем не менее, он по-прежнему принимает запросы POST и возвращает JSON.

[HttpPost]
public JsonResult SearchByDemographic()
{
    List<ListItem> list = new List<ListItem>() {
        new ListItem() { Value = "1", Text = "Patient 1" },
        new ListItem() { Value = "2", Text = "Patient 2" },
        new ListItem() { Value = "3", Text = "Patient 3" }
    };

    return this.Json(list);
}

Затем мой jQuery немного модифицируется для использования $.ajax, что просто для $.getJSON, и допускает еще несколько опций.

$('#DemoGraphSubmit').click(function (e) {
    e.preventDefault();

    $.ajax({
        url: 'SearchByDemographic',
        type: 'POST',
        success: function (data) {
            $.each(data, function (i, optionData) {
                var option = new Option(optionData.Text, optionData.Value);
                $('#PatientListToAdd').append(
                    $('<option></option>').val(optionData.Value).html(optionData.Text)
                );
            });
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...