我刚刚开始使用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/myScript.js"));
来自评论:mmushtaq - &#34; IMO,原因是OP已将@Scripts.Render("~/bundles/bndlName")
定义为openModal
&#34;。 - 功能function expression
无法正常工作。
答案 0 :(得分:0)
您的onSuccess属性错误。
以这种方式试试
onSuccess = "(function() { openModal('myModal');})()"
看起来有点奇怪,但是,它有效,我使用相同的方法来调用带参数的函数