C# 在Ajax.BeginForm中加载ElementId时不显示加载图像
我有一个MVC3应用程序,我需要添加ajax加载图像。这是我的看法C# 在Ajax.BeginForm中加载ElementId时不显示加载图像,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我有一个MVC3应用程序,我需要添加ajax加载图像。这是我的看法 @using (Ajax.BeginForm( "LogOn","Account", new AjaxOptions { LoadingElementId = "div_loading" })) 这是我在同一视图上的非常简单的div: <div id="div_loading" style="display:none;"> <img src="@Url.Content
@using (Ajax.BeginForm(
"LogOn","Account",
new AjaxOptions { LoadingElementId = "div_loading" }))
这是我在同一视图上的非常简单的div:
<div id="div_loading" style="display:none;">
<img src="@Url.Content("~/Content/Images/loading.gif")" alt="" />
</div>
当我单击“提交”按钮将表单发回时,loading.gif永远不会出现。我的代码运行正常,但没有显示加载指示器。图像的命名正确,位置正确。有人知道为什么吗
更新
显然,这与Telerik应用程序有关。如果我创建一个常规的MVC3应用程序,它会正常工作。当我创建Telerik MVC3应用程序时,它不起作用。还有其他人在Telerik中遇到过这种情况吗?我宁愿避免在每次调用ajax时都附加一个加载iamge 这里最重要的答案是一种解决方案,可以在ajax发出发送调用时显示ajax微调器(加载图像): 它具有您需要的功能。只需使用javascript将图像的显示附加到ajax调用 应该是这样的:
<script type="text/javascript">
$(document).ready(function () {
BindSpinner();
});
function BindSpinner() {
$("#div_loading").bind("ajaxSend", function () {
$(this).show();
}).bind("ajaxStop", function () {
$(this).hide();
}).bind("ajaxError", function () {
$(this).hide();
});
};
</script>
$(文档).ready(函数(){
BindSpinner();
});
函数BindSpinner(){
$(“#div_加载”).bind(“ajaxSend”,函数(){
$(this.show();
}).bind(“ajaxStop”,函数(){
$(this.hide();
}).bind(“ajaxError”,函数(){
$(this.hide();
});
};
这样做的目的是在ajax发送上显示div,并在页面上所有调用的ajax停止或出错时隐藏它。如果您将此脚本和div放在您的_布局中,它将为您站点上的每个Ajax调用执行此操作。您可能希望尝试此操作。我是从那个问题上得到的
您也可以从以下位置尝试:
我也遇到了同样的问题,并且能够通过更改要隐藏/显示的元素的名称来解决它。我使用了驼峰格式:“myDivToBeHidden”
元素需要将“display”属性设置为“none”。感谢您的响应。我将此添加到我的_Layout.cshtml中,但仍然没有看到加载程序。ajaxSend是我需要创建的方法吗?看起来很明显,但是图像是否已加载到您的项目中?尝试将备用文本设置为某个值,以确保显示div。哦,确保你的div也在_布局中。是的,在那里。如果我删除style=“display:none”并刷新,就会显示gif。相信我,我先看了一下。试着在div上设置z-index,也许前面没有加载图像。style='z-index:1234';我交叉着手指试过了,但没用:(我设置了一个示例项目,它可以工作。我将它移动到我的主项目,但它没有。但这似乎很简单。在加载gif之前,我隐藏并显示了对象。加载gif的操作是否没有被复制到输出目录?是否将生成操作设置为“内容”,并将“复制到输出”设置为“始终复制/Copy(如果较新)”?我认为显示:无一个是正确的。我尝试了这两种方法都适用于我。我认为OnBegin可能是一种方法,但它没有调用我的方法AjaxBegin。我这样做就像新的AjaxOptions{OnBegin=“return AjaxBegin()”})AjaxOptions事件采用javascript字符串或javascript函数名,因此只要您的AjaxBegin函数位于全局命名空间上,就应该可以工作。如果您选择:new AjaxOptions{OnBegin=“AjaxBegin”}@user1202717嘿,我只是想跟进一下,看看这对你是否有效?太棒了。这就是我一直在追求的。@BoundForGlory嘿,我只是想跟进一下,看看这对你是否有效?你试过用firebug调试它吗?你的控制台中有错误吗?
<div id="div_loading" style="visibility:hidden;">
<img src="@Url.Content("~/Content/Images/loading.gif")" alt="" />
</div>
function AjaxBegin()
{
$('#div_loading').show();
}
function AjaxComplete()
{
$("#div_loading").hide();
}
function AjaxFailure(ajaxContext)
{
var response = ajaxContext.responseText;
alert("Error Code [" + ajaxContext.ErrorCode + "] " + response);
}
AjaxOptions:
OnFailure = "AjaxFailure";
OnBegin = "AjaxBegin";
OnComplete = "AjaxComplete";