提交时 ASP.NET jQuery 重新加载元素(Ajax POST/GET)

Posted

技术标签:

【中文标题】提交时 ASP.NET jQuery 重新加载元素(Ajax POST/GET)【英文标题】:ASP.NET jQuery reload element on submit (Ajax POST/GET) 【发布时间】:2021-10-06 22:10:21 【问题描述】:

使用 ASP.NET 我尝试使用 jQuery 而不是使用“location.reload();”仅重新加载网页的一部分。这是一个单页应用程序。当用户提交表单时,用户积分会发生变化,并且应该更新新值,而无需重新加载整个页面。 credits 的值是通过 Ajax Get Call 检索的,并且应该在 Ajax Post Call 之后更新。我尝试使用 "$("#userCredits").load(?);"在 Ajax Post 中,但无法正确处理。我需要做一个局部视图来实现这一点吗?感谢您的帮助。

HTML _Layout.cshtml

<ul class="nav masthead-nav">
   <li id="userCredits">
      //Paragraph retrived from Ajax Get Call: "#reloadUserCredits".
   </li>

   <li>
     <p class="user">@User.Identity.GetUserName()</p>
   </li>
</ul>

JS

//Ajax POST user pack (buy pack)
    $("#postform").submit(function (e) 
        e.preventDefault();
        var data = 
            applicationUserId: $("#userId").val().trim(),
            packId: $("input.activeImg").val().trim(),
        
        $.ajax(
            url: '/api/buypack',
            type: 'POST',
            dataType: 'json',
            data: data,
            success: function () 
                document.getElementById("postform").reset();
                location.reload();
            ,
            error: function () 
            
        );
    );

// Ajax GET user credits (navbar userCredits)
    var $credits = $('#userCredits')

    $.ajax(
        type: 'GET',
        url: '/api/user',
        success: function (credits) 
            $.each(credits, function (i, user) 
                $credits.append('<p id="reloadUserCredits" class="credits">Credits: ' + user.credits + '</p>');
            );
        
    );

【问题讨论】:

【参考方案1】:

据我了解...您已经在页面加载时通过 Ajax 获得用户积分。所以你只需要在他多买一些之后再做一次。

在命名函数中向/api/user 发出Ajax 请求。下面,我称之为get_credits()。在页面加载和对/api/buypack 的 Ajax 请求成功时运行它。

//Ajax POST user pack (buy pack)
$("#postform").submit(function (e) 
    e.preventDefault();
    var data = 
        applicationUserId: $("#userId").val().trim(),
        packId: $("input.activeImg").val().trim(),
    
    $.ajax(
        url: '/api/buypack',
        type: 'POST',
        dataType: 'json',
        data: data,
        success: function () 
            document.getElementById("postform").reset();
            //location.reload();
            
            // Refresh the credits displayed on the page
            get_credits();
        ,
        error: function () 
        
    );
);

// Ajax GET user credits (navbar userCredits)
var $credits = $('#userCredits')

function get_credits()
  $.ajax(
    type: 'GET',
    url: '/api/user',
    success: function (credits) 
      $.each(credits, function (i, user) 
        $credits.html('<p id="reloadUserCredits" class="credits">Credits: ' + user.credits + '</p>');
      );
    
  );


// Run on page load
get_credits();

【讨论】:

感谢您的帮助。尽管它重复了学分段落,但它接近解决方案。见链接中的图片:niklasmalm.se/img/duplicate.png 找到了一个解决方案,它现在似乎工作正常。 // 刷新页面显示的积分 $("#reloadUserCredits").replaceWith(get_credits()) 我明白了。 “重复”是因为.appendgetCredits 的每个循环中。你可以试试.html。会更有效率。但是您使用replaceWith 的解决方案也是正确的,因为它有效;) 哦,现在我明白了!起初我没有注意到“.html”。您的解决方案要好得多。现在我可以继续了,谢谢你的帮助! :)

以上是关于提交时 ASP.NET jQuery 重新加载元素(Ajax POST/GET)的主要内容,如果未能解决你的问题,请参考以下文章

自动发布回asp.net后如何重新加载脚本?

jquery load加载动态页面

提交文本框的值而不重新加载页面

使用 JavaScript 的 ASP.NET 回发

使用 javascript/jquery 检测 Asp.Net 表单是不是有效

如何在 ASP.NET MVC 中通过 Ajax 提交表单?