0

我有一个下拉列表,其中包含一个访问列表,其显示如下: 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; }
    }
4

1 回答 1

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);
});
于 2012-10-03T05:59:28.637 回答