对象,来自javascript的对象消息,试图根据第一个下拉列表填充下拉列表

时间:2012-10-03 05:28:40

标签: c# javascript asp.net-mvc

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

1 个答案:

答案 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);
});