2011-12-11 39 views
0

我在这里看到很多问题关于DropDownList和DropDownListFor事件不开火,但没有解决我的问题的答案。我不认为我已经忽略了什么,所以我会后我自己的问题......ASP.NET MVC 3与剃刀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> 

下拉从正确填充我的ViewModel中的SelectList,唯一需要注意的是,VM中的CurrentCategoryId是一个public 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

你有jQuery引用的任何地方吗? – epzee

+0

更新后参考 – ConfusedMonkey

+0

你可以粘贴html输出吗? – sTodorov

回答

1

'select#CurrentCategoryId'期待命名控制“CurrentCategoryId”,但你的下拉列表中的名称是虚拟机的ID。

编辑

我会做的是改变从一个jQuery函数你的JavaScript到正规的功能。

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

然后改变你的HTML帮助:

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

我不是剃刀语法100%,但我认为你的想法。

+0

“,new {@id =”CurrentCategoryId“}”不提供该链接吗? – ConfusedMonkey

+0

编辑:我认为你是对的,我没有看到你没有指定@id = Model.CurrentCategoryId,而是实际的字符串“CurrentCategoryId”。请参阅我的编辑,了解我该怎么做。 – hawkke

+0

谢谢hawkke,这让我走上了正确的道路。我已经将完成的代码发布在问题的下面,以供感兴趣的人使用。 – ConfusedMonkey