【发布时间】:2017-07-06 16:38:23
【问题描述】:
当下拉列表的值发生变化时,我需要根据下拉列表的新值更改两个文本框的值,而不刷新页面。
这应该很容易,但我无法弄清楚是什么让 AJAX 运行。好像能取到值,但是无法设置文本框。
JavaScript:
// Dropdown ID = PatientID, textbox ID = DoB
var patient = $("#PatientID");
patient.change(function () {
var newDob;
$.ajax({
url: '@(Url.Action("PatientDob"))?patientId=' + patient.val(),
type: "GET",
success: function (result) {
// Displays correct result
alert(result);
newDob = result;
},
error: function (xhr, status, err) {
alert(err);
}
});
// Causes the box to become blank, HTML value attribute doesn't change
$("#DoB").val(newDob);
});
控制器:
[HttpGet]
public string PatientDob(int patientId)
{
return db.Patients.Find(patientId).DateOfBirth.ToString("MM/dd/yyyy");
}
【问题讨论】:
-
请求是异步的 -
success将在请求完成后的某个时间点运行,目前$("#DoB").val(newDob);在此之前被调用。设置你当前alert()的值 -
@AlexK。我不认为我在我的生活中感到如此愚蠢。在有限的睡眠中跑步。我想我在前一个树桩的末尾有
.val(),自动驾驶仪告诉我它需要在那里设置。 -
有一个ajax完成事件你也可以使用,api.jquery.com/ajaxcomplete
-
@JasonRoner 很高兴知道,谢谢。
-
您不应将答案与问题放在同一帖子中。您的答案与 ebraley 发布的代码相同.. 并且查看 ebraley 发布的内容更清晰,因为在答案部分。我已经删除了它,因为它在那里没有任何好处,而且它的位置只会让事情变得不太清楚。
标签: javascript c# jquery ajax asp.net-mvc