MVC 在局部视图中使用 JS

MVC using JS inside partial view

在我的主视图中,我有 ajax 个操作链接

例如

  @Ajax.ActionLink("Update Hours", "companyhours", "business",
 new { Id = ViewBag.Id }, new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "divCurrentView" })

控制器内部

 public ActionResult CompanyHours(string Id)
    { ...   return PartialView("UpdateCompanyHours", model);}

视图在点击时加载

部分视图 "UpdateCompanyHours.cshtml" 我有

@model CompanyHoursVM
@{Layout = null; }
@using (Ajax.BeginForm("CompanyHours", new AjaxOptions { UpdateTargetId = "presult", HttpMethod = "POST", InsertionMode = InsertionMode.Replace }))
{     
  @Html.ValidationSummary(true)
  @Html.AntiForgeryToken()

  // i have textboxes and a button - everything loads fine
  @Html.CheckBoxFor(model => model.Open247, new { @class = "Time24hrs"})
 }

这是问题所在:

我想在我的主视图中添加我的 js 文件。在主视图页面底部添加代码:

@section Scripts
{
    <script src="~/Scripts/myjs.js"></script>
}

甚至没有@section Scripts 标签

js文件很简单。第一个警报被执行但点击它没有

(function () {
$(function () {
    alert("alert1");
    $('.Time24hrs').click(function () {
        alert("alert2");
    });
});
})();

js没有被识别。但是,如果我在局部视图中添加 js 文件,它就可以正常工作

如何在主视图中加载js文件并在局部视图中使用js文件?

我打赌 ajax 调用 return 您的部分异步完成是在调用主页的加载函数之后,在这种情况下,没有机会按照您的方式设置事件处理程序因为该元素尚未添加到 dom。当您的部分加载时,您需要以某种方式通知。

当您点击 "Update Hours" link 时,ajax 代码动态地将新的 DOM 元素注入当前 dom(部分标记看法)。但是您的点击事件已注册到现有元素(页面加载时的当前元素)。没有为这些新 dom 元素注册的点击事件处理程序。

使用jQueryon方法绑定点击事件。使用 on 方法,您可以为 DOM

当前和未来元素 注册事件

这应该有效。

$(function () {

    $(document).on("click",".Time24hrs",function () {
        alert("alert2");
    });

});