这是一个非常基本的问题,我想我在这里提出非常棘手的问题而且他们从来没有得到答案......让我把它分解成最简单的组件并从那里开始工作...... 我有一个视图,要求输入用户信息...在提交时,此视图调用一个控制器,这将为我提供我需要重新放入此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>
答案 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(""));
});
});
});