Ajax.ActionLink OnSuccess不在单独的js文件中调用js函数

时间:2017-07-19 06:46:40

标签: javascript jquery ajax asp.net-mvc asp.net-mvc-5

我刚刚开始使用Ajax.ActionLink帮助器,我正在努力在OnSuccess方法的单独js文件中调用js函数。

我收到的错误如下:

Uncaught ReferenceError: openModal is not defined
at HTMLAnchorElement.eval (eval at getFunction (jquery.unobtrusive-ajax.js:37), <anonymous>:3:1)
at Object.success (jquery.unobtrusive-ajax.js:113)
at fire (jquery-3.1.1.js:3305)
at Object.fireWith [as resolveWith] (jquery-3.1.1.js:3435)
at done (jquery-3.1.1.js:9242)
at XMLHttpRequest.<anonymous> (jquery-3.1.1.js:9484)

当我将openModal标记放在我使用<script></script>的{​​{1}}内的View标记内时,一切正常。

所以我在网上搜索了一个解决方案,发现了一些文章,尝试了所提出的解决方案,但仍然没有。

然后我开始思考:这个问题真的有一个真正的解决方案,或者我找到的所有解决方案,经过尝试然后声明不起作用是某种Ajax.ActionLink

任何建议和/或帮助和/或工作解决方案都将受到赞赏。

提前致谢!

编辑1:提供代码:

我的HACK中的代码:

View

我单独的js文件中的代码:

<div class="row">
@foreach (SomeViewModel m in Model)
{
    <div class="col-md-4">
        <div class="panel panel-default">
            <div class="panel-heading">
                @m.Prop1 - @Ajax.ActionLink("Link Text", "ActionName", "ControllerName", new { obj = m },
                             new AjaxOptions
                             {
                                 HttpMethod = "GET",
                                 UpdateTargetId = "dynamicContentContainer",
                                 OnSuccess = "openModal('myModal')"
                             }, new { @id = "ajaxLink" })
            </div>
            <div class="panel-body">
                @m.Prop2
            </div>
            <div class="panel-footer">
                @m.Prop3
            </div>
        </div>
    </div>
}

编辑2:

我已将js文件包含在BundleConfig.cs

openModal = function (modalId) {
    $('#' + modalId).modal('show');
}

我正在_Layout.cshtml视图中呈现特定的包

bundles.Add(new ScriptBundle("~/bundles/bndlName").Include("~/Scripts/myScri‌​pt.js"));

来自评论:mmushtaq - &#34; IMO,原因是OP已将@Scripts.Render("~/bundles/bndlName") 定义为openModal&#34;。 - 功能function expression 无法正常工作

1 个答案:

答案 0 :(得分:0)

您的onSuccess属性错误。

以这种方式试试

onSuccess = "(function() { openModal('myModal');})()"

看起来有点奇怪,但是,它有效,我使用相同的方法来调用带参数的函数