使用Jquery和Json数据MVC2将数据回发到同一视图

时间:2011-07-28 19:30:48

标签: jquery json asp.net-mvc-2 post

这是一个非常基本的问题,我想我在这里提出非常棘手的问题而且他们从来没有得到答案......让我把它分解成最简单的组件并从那里开始工作...... 我有一个视图,要求输入用户信息...在提交时,此视图调用一个控制器,这将为我提供我需要重新放入此SAME视图的数据...我如何得到它数据返回到我的视图,而不是在执行控制器结束时再次调用相同的视图...?

这是我到目前为止(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 个答案:

答案 0 :(得分:1)

虽然我的示例并不完全模仿您的设计(您可能正在使用页面方法或一些有问题的路由),但只要/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)
                );
            });
        }
    });
});

答案 1 :(得分:1)

你正在使用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代码似乎没问题。您正在为数据发送null。我脑后的一些小声音说,如果你打算不发送任何数据,那么你应该使用一个空对象或完全省略它。所以

$(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(""));
        });
    });
});