0

次のように表示される訪問のリストを含むドロップダウンリストがあります。 5/3/2012 At Schoolこのドロップダウンリストの下には、[日付]フィールドと訪問タイプのドロップダウンリストがあります。最初のドロップダウンリストに基づいてこれらのフィールドに入力したいと思います。したがって、この例では、日付フィールドはで埋められ5/3/2012、訪問タイプは次のようになります。At School

javascriptを使用していますが、[オブジェクトオブジェクト]というエラーウィンドウが表示されます。

これが私のコードです:

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"

Content-Typeまたは、jQueryはサーバーからの応答ヘッダーを使用して応答を自動的に解析するのに十分賢いので、それを完全に取り除きます。

また、以下を削除します。

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 に答える