Javascript 更改Url.Action的单击事件上的li/a标记文本

Javascript 更改Url.Action的单击事件上的li/a标记文本,javascript,jquery,asp.net-mvc-4,Javascript,Jquery,Asp.net Mvc 4,在Razor视图中有以下html: `<li id="myli"><a href="@Url.Action(MyAction, new { Id = ViewBag.Id })" >TEST</a></li> ` 我不能以任何方式改变它。在处理MyAction时,需要显示某种类型的“请稍候”指示器。 我尝试了很多方法,首先是非常简单的:将链接中的文本“TEST”更改为$('#myli')中的“Please Wait”。单击事件。但文本更改仅在从

在Razor视图中有以下html:

`<li id="myli"><a href="@Url.Action(MyAction, new { Id = ViewBag.Id })" >TEST</a></li>
`
  • 我不能以任何方式改变它。在处理MyAction时,需要显示某种类型的“请稍候”指示器。 我尝试了很多方法,首先是非常简单的:将链接中的文本“TEST”更改为$('#myli')中的“Please Wait”。单击事件。但文本更改仅在从控制器操作返回后发生

    @section scripts{
    <script type="text/javascript">
    
    $('#myli').click(function () {
            event.preventDefault();          
            $(this).text("Please Wait"); // displayed only After return from controller action 
            sleep(2000);
    )};
    
    function sleep(milliseconds) {
            var start = new Date().getTime();
            for (var i = 0; i < 1e7; i++) {
                if ((new Date().getTime() - start) > milliseconds) {
                    break;
                }
            }
        }
    
     </script>
    }
    
    @节脚本{
    $('#myli')。单击(函数(){
    event.preventDefault();
    $(this).text(“请稍候”);//仅在从控制器操作返回后显示
    睡眠(2000年);
    )};
    函数睡眠(毫秒){
    var start=new Date().getTime();
    对于(变量i=0;i<1e7;i++){
    如果((新日期().getTime()-start)>毫秒){
    打破
    }
    }
    }
    }
    
    在调用操作之前,是否有方法更改链接的文本?
    谢谢

    试试这个

    $('#myli').click(function () {
            event.preventDefault();  //what does event mean????
    
    改为:

    $('#myli').click(function (event) {
            event.preventDefault();
    
    更新: 为什么要运行这样的循环,不能使用通用的setTimeout吗

    $('#myli').click(function (event) {
            event.preventDefault();
            $(this).text('Please Wait...');
            setTimeout(function(){alert('Thanks For Waiting!')},5000)
     });
    

    请参阅jsfiddle中的我认为使用
    ajax.actionlink是明智的,它将在运行时转换为锚标记

        <li id="myli"> @Ajax.ActionLink("TEST", "Action", "Controller", new { Id = ViewBag.Id }, new AjaxOptions
           {
             HttpMethod = "Get",
             OnSuccess = "successFunction",
             OnFailure = "onFailureFunction",
             OnBegin = "startAjax",
             LoadingElementId = "PleaseWaitContainer",
             OnComplete = "endAjax"
            })
    </li>
    

    您还可以使用java脚本函数,如
    startAjax()
    endAjax()
    ,这些函数可以在ajax调用的开始和结束时调用。

    发布更多信息,在这里您希望在操作进行时显示一些指示器显示代码您尝试了什么以及如何使用?我确实使用了您建议的方法(只是在我的问题文本中犯了错误),同样的问题。我也尝试更改sleep()值,但没有任何区别,只睡3-4秒,文本总是在睡眠后更改()完成了,不是以前。我只尝试了很长的循环而不是睡眠:同样的问题谢谢,但正如我所说的,下面的链接标签必须保持不变:
  • 如果你在它周围包装一个
  • ,那么呈现的html将与你想要的一样。我已经更新了我的答案。如果你想使用jquery,那么Scott的答案是可以选择的
    <div id="PleaseWaitContainer" style="display:none;">Please wait</div>.