MVC View中的jQuery没有被执行

时间:2013-12-31 17:46:46

标签: javascript jquery asp.net-mvc

我一直在寻找这个答案而没有任何运气,所以我想我会发布这个问题。

我确信我可以围绕这个编码,但我真的很想知道为什么这不起作用。

我有一点jQuery代码:

$("body").on("change", "#StackNameId190", function () {
    alert('got it');
});

如果我在.js文件中包含此代码,它可以正常工作。但是,如果我将其包含在正在访问它的视图中 - 它不会。

我在视图中有类似的正文/更改脚本,它们工作正常,但这个没有。我在视图中需要它的原因是我希望能够根据模型中的内容动态生成脚本。最终结果看起来像这样:

@foreach (var stack in @Model.Stacks)
    {
        @Html.Raw(string.Format("$('body').on('change', '#StackNameId{0}', function () {{$('#btnStackName{0}').click(); alert('got it');}});", @stack.Id));
    }

我不明白的是,为什么这在.js文件中工作正常,但在视图中却没有?我可以看到的唯一可能影响它的是具有StackNameId190的Id的文本框是从局部视图生成的。我不确定是否或为什么会产生任何影响。以下是尝试访问jQuery的代码:

<div id="submitStackName@(Model.Id)">
    @using (Ajax.BeginForm("_SubmitStackName", "Position",
        new AjaxOptions
        {
            UpdateTargetId = String.Format("submitStackName{0}",@Model.Id),
            OnFailure = "ajaxFailureHandler",
            OnComplete = String.Format("updatedStackName('#{0}')", String.Format("submitStackName{0}", @Model.Id))
        }, new { @id = String.Format("StackNameForm{0}", @Model.Id) }))
    {
        @Html.AntiForgeryToken()
        @Html.HiddenFor(model => model.Id)
        @Html.LabelFor(model => model.Name, new { style = "width:150px" })
        @Html.TextBoxFor(model => model.Name, new { style = "width:300px", @id = String.Format("StackNameId{0}", @Model.Id) })
        @Html.ValidationMessageFor(model => model.Name)
        <button type="submit" id="btnStackName@(Model.Id)" style="display:none"></button>
    }
</div>

对此的任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:0)

解决了问题...但我不确定为什么它已经解决了。我将脚本渲染从_layout.cshtml文件的底部移动到文件的顶部,就在body标签的下方。

我仍然不能100%肯定为什么现在这样做了,但似乎jQuery尚未准备就绪。