1

すべての私のコードの下で、

*モデル*

以下はモデルコードです、

public class MyViewModel
{
    public int? Year { get; set; }
    public int? Month { get; set; }

    public IEnumerable<SelectListItem> Years
    {
        get
        {
            return Enumerable.Range(2000, 12).Select(x => new SelectListItem
            {
                Value = x.ToString(),
                Text = x.ToString()
            });
        }
    }
}

コントローラ

以下はコントローラーコードです。

//
    // GET: /MenuSix/

    public ActionResult Index()
    {
        var model = new MyViewModel();
        return View(model);
    }

    public ActionResult Months(int year)
    {
        if (year == 2011)
        {
            return Json(
                Enumerable.Range(1, 3).Select(x => new { value = x, text = x }),
                JsonRequestBehavior.AllowGet
            );
        }
        return Json(
            Enumerable.Range(1, 12).Select(x => new { value = x, text = x }),
            JsonRequestBehavior.AllowGet
        );
    }

意見

以下はビューコードです、

@model DemoWeb.Models.MenuSix.MyViewModel
@using (Html.BeginForm()) 
{
@Html.DropDownListFor(
x => x.Year,
new SelectList(Model.Years, "Value", "Text"),
"-- select year --"
)
@Html.DropDownListFor(
x => x.Month,
Enumerable.Empty<SelectListItem>(),
"-- select month --"
)
}

@section PageScriptsAndCSS{
<script type="text/javascript">
    $('#Year').change(function () {
        debugger;
        var selectedYear = $(this).val();
        if (selectedYear != null && selectedYear != '') {
            $.getJSON('@Url.Action("Months")', { year: selectedYear }, 
 function    (months) {
                var monthsSelect = $('#Month');
                monthsSelect.empty();
                $.each(months, function (index, month) {
                    monthsSelect.append($('<option/>', {
                        value: month.value,
                        text: month.text
                    }));
                });
            });
        }
    });

</script>
}

上記のコードをテストしていますが、ここで呼び出されないjqueryコードで、ドロップダウン変更イベントがjqueryで呼び出されない理由を提案してください。

4

1 に答える 1

1

javascriptコードをdocument.readyでラップして、theneventをバインドするときにコントロールが使用可能であることを確認します。ITは、このJavaScriptが先頭にレンダリングされているように見えますが、その時点では、ドロップダウンはまだDOMに追加されていません。

$(document).ready(function()

{$( "#year").///残りのコード});

于 2012-07-01T06:49:33.577 に答える