我有一个下拉列表,其中包含一个显示的访问列表,如下所示:
5/3/2012 At School
此下拉列表下方是日期字段和访问类型下拉列表。我想根据第一个下拉列表填充这些字段。因此,对于此示例,日期字段将填充5/3/2012
,访问类型将为:At School
我使用javascript来使用它,但我有一个错误窗口说[object Object]。
这是我的代码:
JavaScript的:
<script type="text/javascript">
var durationRowVisibilityCheck = function () {
var disableDuration = $.trim($("select#UnableToVisitReasonId option:selected").text()).length != 0;
var $durationRow = $("#visitDuration");
if (disableDuration) $durationRow.hide(); else $durationRow.show();
};
$(function () {
durationRowVisibilityCheck();
$("select#UnableToVisitReasonId").change(function () {
durationRowVisibilityCheck();
});
$("#VisitEntryId").change(function(e) {
var visitEntryId = $("#VisitEntryId.option:selected").val();
if (visitEntryId != '<%=Guid.Empty %>')
GetVisitDetails(visitEntryId);
});
});
function GetVisitDetails(visitEntryId)
{
$.ajax({
url: '<%=Url.Action("GetVisitDetails", "VisitActivity") %>' + '?visitEntryId=' + visitEntryId,
contenttype: "application/json; charset=utf-8",
success: function(json) {
populate(json);
},
error: function (xhr, status, error) {
alert(xhr);
},
type: "POST",
datatype: "json"
});
}
function populate(data) {
$("#ActivityDate").val(data.VisitDate);
$("#VisitTypeId").val(data.VisitTypeId);
}
获取详细信息方法:
public JsonResult GetVisitDetails(Guid visitEntryId)
{
var model = new VisitDetailModel();
VisitEntry visitEntry = _visitEntryService.Get(visitEntryId);
if(visitEntry == null)
{
model.Message = string.Format(Message.NotFoundMessage, Resources.Entities.Visit.EntityName);
return Json(model);
}
model.VisitEntryId = visitEntryId;
model.VisitTypeId = visitEntry.VisitTypeId;
if (visitEntry.VisitType != null)
model.VisitType = visitEntry.VisitType.Description;
model.VisitDate = visitEntry.VisitDate.ToShortDateString();
return Json(model);
}
#region Nested Type:VisitDetailModel
public class VisitDetailModel
{
public Guid VisitEntryId { get; set; }
public short VisitTypeId { get; set; }
public string VisitType { get; set; }
public string VisitDate { get; set; }
public string Message { get; set; }
}
答案 0 :(得分:1)
尝试替换
datatype: "json"
使用:
dataType: "json"
或完全摆脱它,因为jQuery足够聪明,可以使用服务器的响应Content-Type
标头并自动解析响应。
同样删除:
contenttype: "application/json; charset=utf-8",
您没有向服务器发送任何JSON。您正在发送正常请求。
所以,以下是如何调整您的$.ajax
电话:
$.ajax({
url: '<%= Url.Action("GetVisitDetails", "VisitActivity") %>',
type: 'GET',
cache: false,
data: { visitEntryId: visitEntryId },
success: function(json) {
populate(json);
},
error: function (xhr, status, error) {
alert(xhr);
}
});
因为我已经为AJAX请求指定了GET动词(这是用于从服务器检索数据的正确动词),所以你需要调整你的GetVisitDetails
控制器动作,以便它通过GET发送JSON。默认情况下不允许:
return Json(model, JsonRequestBehavior.AllowGet);
以下选择器对我来说似乎不对:
var visitEntryId = $("#VisitEntryId.option:selected").val();
尝试直接检索.change()
事件处理程序中下拉列表的选择值:
$('#VisitEntryId').change(function(e) {
var visitEntryId = $(this).val();
if (visitEntryId != '<%=Guid.Empty %>')
GetVisitDetails(visitEntryId);
});