关于更改函数的Jquery没有在asp.net MVC中触发

时间:2017-02-09 12:15:02

标签: javascript c# jquery asp.net-mvc

关于更改函数的Jquery没有在asp.net MVC中触发

免责声明:这可能看起来像是一个常见的问题,但请耐心等待并阅读到底。

我有两个文件,即 CreateProject.cshtml projectMasterNew.js
CreateProject.cshtml
    

    
    <div class="form-group">
        @Html.LabelFor(model => model.Account.AccountName, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownListFor(model => model.Account.AccountName, new SelectList(ViewBag.GetAccount, "AccountId", "AccountName"))
            @Html.ValidationMessageFor(model => model.Account.AccountName, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Account.DMName, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownListFor(model => model.Account.DMName, new SelectList("", "DMId", "DMName"))
            @Html.ValidationMessageFor(model => model.Account.DMName, "", new { @class = "text-danger" })
        </div>
    </div>
    <script src="~/Scripts/DMS/projectMasterNew.js"></script>
    <script>
        var getDmUrl = '@Url.Action("GetDMList", "Project", new { area = "Masters" })';
    </script>
    
    

projectMasterNew.js
    
    
    $(document).ready(function () {
        alert($("#Account_AccountName").val());
        $("#Account_AccountName").on("change", function () {
            alert($("#Account_AccountName").val());
            var jsonData = { account: $(this).val() };

            getJsonCall("Project Creation", getDmUrl, jsonData, function (response) {
                var dName = $('#Account_DMName');
                alert("Dropdwn update");
            });
            alert("Success");
        }, false);
    });
    
    

上面的jquery代码一直工作到今天早上 问题:
由于我在函数之前收到警报,因此在页面加载时正在访问该脚本。但是当我更改AccountName下拉列表中的值时,更改事件未触发。 我尝试按如下方式调用更改方法:
 1.

$(document).on("change", "#Account_AccountName", function () {
 2.
$("#Account_AccountName").change(function () {
没有结果。

所以,经过一番研究后,我实施了以下内容     

    
    function DmList() {
        alert($("#Account_AccountName").val());
        var jsonData = { account: $("#Account_AccountName").val() };

        getJsonCall("Project Creation", getDmUrl, jsonData, function (response) {
            var dName = $('#Account_DMName');
            $.each(response, function (index, item) { 
                dName.append($('').text(item.DMName).val(item.DMId));
            });
            alert("Dropdwn update");
        });
        alert("Success");
    }
    @Html.DropDownListFor(model => model.Account.AccountName, new SelectList(ViewBag.GetAccount, "AccountId", "AccountName"), new { onchange = "DmList()"})
    
    


正如您将注意到的,未在Document Ready上调用jquery函数。那是因为,添加它也会引发错误

对于那些想知道的人,我的 BundleConfig.cs 有     

bundles.Add(new ScriptBundle("~/bundles/jquery").Include("~/Scripts/jquery-{version}.js"));
我的 _Layout.cshtml 有     
@Scripts.Render("~/bundles/jquery")

我想知道为什么这是一个问题,我该怎样做才能避免将来出现这种差异?

1 个答案:

答案 0 :(得分:2)

您的change事件未触发,因为您有一个额外的false作为更改事件绑定的最后一个参数。我不知道为什么。

还要确保页面中没有任何其他脚本错误。

这应该可以正常工作。

$(document).ready(function () {

     $("#Account_AccountName").on("change", function () {
        alert($(this).val());
        var jsonData = { account: $(this).val() };
        // your get JSON call goes here

        alert("Success");
    });
});

在使用它之前定义getDmUrl变量也是一个好主意。我建议使用javascript命名空间而不是简单地使用全局变量。

<script>
     var myProj = myProj || {};
     myProj.getDmUrl = '@Url.Action("GetDMList", "Project", new { area = "Masters" })';
</script>
<script src="~/Scripts/DMS/projectMasterNew.js"></script>

projectMasterNew.js中,使用myProj.getDmUrl进行ajax通话。