ASP.NET MVC 3 с Razor DropDownList для изменений не срабатывает - PullRequest
0 голосов
/ 12 декабря 2011

Здесь я видел много вопросов, касающихся событий DropDownList и DropDownListFor, которые не запускаются, но нет ответов, которые решают мою проблему. Я не думаю, что я что-то упустил, поэтому я отправлю свой вопрос ...

У меня есть следующий код в моем представлении:

@model MyWebApp.ViewModels.ProductAdminViewModel
@{
    ViewBag.Title = "Manage Products";
}
<script type="text/javascript">
    $(function () {
        $('select#CurrentCategoryId').change(function () {
            alert('We got here!');
        })
    });
</script>

@using (Ajax.BeginForm(new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "indexGrid" }))
{ 
    <fieldset>
        <legend>Select Category</legend><span>Category: </span>
        @Html.DropDownListFor(model => model.CurrentCategoryId, Model.CategorySelectList, new { @id = "CurrentCategoryId" })
    </fieldset>
}
<div id="indexGrid">
    @Html.Partial("_indexGrid", Model)
</div>

Раскрывающийся список корректно заполняется из списка SelectList в моей ViewModel, и единственное, на что следует обратить внимание, это то, что CurrentCategoryId в виртуальной машине является общедоступным свойством int.

Что я упустил, привязав раскрывающийся список к сценарию?

РЕДАКТИРОВАТЬ: в моем файле _Layout.cshtml есть следующее:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
<script type="text/javascript" src="/Scripts/prototype.js"></script>
<script type="text/javascript" src="/Scripts/scriptaculous.js?load=effects,builder"></script>
<script type="text/javascript" src="/Scripts/lightbox.js"></script>
<script type="text/javascript" src="/Scripts/jquery-ui-1.8.16.custom.min.js"></script>
<script type="text/javascript" src="/Scripts/jquery.unobtrusive-ajax.min.js"></script>
<script type="text/javascript" src="/Scripts/EditorTypes.js"></script>

Благодаря @Hawkke. Это мой рабочий код:

<script type="text/javascript">
    function CategoryChanged(newCategoryId) {
        alert('The category has been changed!');
    };
</script>
...
@Html.DropDownListFor(model => model.CurrentCategoryId, Model.CategorySelectList, new { @onchange = "CategoryChanged(" + @Model.CurrentCategoryId + ")" })

1 Ответ

1 голос
/ 12 декабря 2011

'select#CurrentCategoryId' ожидает элемент управления с именем «CurrentCategoryId», но имя вашего выпадающего списка - идентификатор виртуальной машины.

Редактировать

Что бы я сделалэто изменить ваш javascript с функции jQuery на обычную функцию.

<script>
    function ChangeMe(currentCategoryId) {
        // do stuff here
    }
</scrip>

Затем измените ваш помощник HTML:

@Html.DropDownListFor(model => model.CurrentCategoryId, Model.CategorySelectList, 
    new { onchange = "ChangeMe(@Model.CurrentCategoryId)" })

Я не на 100% по синтаксису бритвы, но я думаюВы поняли.

...