Объединяя бритву, Ajax, JSON - PullRequest
       1

Объединяя бритву, Ajax, JSON

0 голосов
/ 29 сентября 2011

Я пытаюсь запустить следующие части, но всегда не получается.Цель состоит в том, чтобы: если цель в поле со списком была выбрана, поле со списком mediaId должно быть заполнено соответствующими значениями.В данный момент я просто эмулирую значения поля со списком mediaId.Может кто-нибудь показать мне, как правильно их комбинировать?Заранее спасибо.

Просмотр Medium.cshtml:

<script src="@Url.Content("~/Scripts/PartialLoad.js")" type="text/javascript"></script>
<div class="editor-label">
    @Html.LabelFor(model => model.Files[i].TargetId)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.Files[i].PTargetId, (ViewData["targets"] as SelectList).MakeSelection(Model.Files[i].PTargetId))
</div>
<div class="editor-label">
    @Html.LabelFor(model => model.Files[i].MediaId)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.Files[i].MediaId, (ViewData["mediaIds"] as SelectList).MakeSelection(1)) 
</div>

javascriptpartloadload.js

$(document).ready(function () {
    $("#targets").change(function () { GetMValues("#targets", "#mediaIds"); });
});

function ClearDrop(objSource) {
    $(objSource).empty();
}

function GetMValues(objSource, objDest) {
    var url = '/GetMValues/';
    $.getJSON(url, { id: $(objSource).val() },
        function (data) {
            ClearDrop(objDest); $.each(data, function (index, optionData) {
                $(objDest).append("<option value='" + optionData.Value + "'>" + optionData.Text + "</option>");
            });
        });
}

homecontroller.cs

public ActionResult GetMValues(String id)
{
    int myId = 0;
    int.TryParse(id, out myId);

    var mediumIds = new List<long>();
    int max = myId + 3;
    // just to emulate the data in the list
    for ( long l = 1 ; l < max ; l++ ){
        mediumIds.Add(l);
    }
    var select = new SelectList(mediumIds, "PTargetId", "TargetId");
    return Json(select, JsonRequestBehavior.AllowGet); //allow get needed to allow get calls
}

1 Ответ

0 голосов
/ 29 сентября 2011

Здесь вы используете селектор идентификатора для выпадающего списка: $("#targets") но ваш выпадающий, похоже, не имеет такого идентификатора.Может быть, вы хотите присвоить ему идентификатор или класс:

@Html.DropDownListFor(
    model => model.Files[i].PTargetId, 
    (ViewData["targets"] as SelectList).MakeSelection(Model.Files[i].PTargetId),
    new { id = "targets" }
)

Но поскольку это, кажется, повторяется, и вы не можете иметь несколько элементов с одинаковым идентификатором, селектор класса, вероятно, более уместен:

@Html.DropDownListFor(
    model => model.Files[i].PTargetId, 
    (ViewData["targets"] as SelectList).MakeSelection(Model.Files[i].PTargetId),
    new { @class = "targets" }
)

и затем:

$(document).ready(function () {
    $(".targets").change(function () { 
        ...
    });
});

То же замечание, очевидно, для #mediaIds.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...