javascript - ASP.NET Page_Load 与 AJAX 页面刷新代码重用/冗余?

标签 javascript c# asp.net ajax entity-framework

下面是代码的工作示例,但是我经常发现自己编写 Page_Load 内容只是为了在通过 ajax 加载后在页面上重写相同类型的代码执行相同类型的操作(以避免回发)。 ...

我忍不住认为一定有某种更好的(也许是面向对象的)方法来操作和创建我们需要在初始 .NET 页面加载后维护的动态 HTML 方法,而无需刷新整个页面。

在下面的代码示例中,您可以假设 AjaxEnginePage 是一个现有的 .NET 页面,它可以适本地解析查询字符串,并且 GetRealTimeFavoritesList() 返回一个适当的对象列表,其中包含需要在 C# 或 JavaScript 中解析的所有信息,来自回过头来,我们获得了代码的可重用性,但是我们如何在 C#/JS 中获得它呢?

OnlineMemberList.ascx

 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="OnlineMemberList.ascx.cs"        Inherits="OnlineMemberList" %>
 <script src="../AJAJSON/Favorites/Favorites.js"></script>
 <script src="../AJAJSON/Jquery/jquery-1.9.1.js"></script>
 <script src="../AJAJSON/Jquery/jquery-ui-1.10.2.custom.js"></script>
 <script src="../AJAJSON/Jquery/jquery.mousewheel.js"></script>
 <script src="../AJAJSON/Jquery/jquery.jscrollpane.js"></script>
 <script type="text/javascript">
      $(document).ready(function () {
         var settings = {
                           autoReinitialise: true
                        };

      $('.scroll-pane').jScrollPane(settings);

      setInterval(function () {
        UpdateFavoritesList();
        }, 10000);
     });
 </script>

<div id="FavoritesList">
    <h3>Favorites</h3>
    <div id="BottomBorderFavorites"></div>
    <div id="Favorites" class="scroll-pane">
      <br />
      <p style="text-align: center;">--- Online ---</p>
      <div id="OnlineFavoritesUserNames" class="OnlineFavoritesUserNames" runat="server"></div>
      <div id="FavoritesChatIcon" class="FavoritesChatIcon" runat="server"></div>
      <div style="clear: both;"></div>
      <br />
      <p style="text-align: center;">--- Offline ---</p>
    <div id="OfflineFavoritesUserNames" class="OfflineFavoritesUserNames" runat="server"></div>
</div>

OnlineMemberList.ascx.cs

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<FavoriteSummary> summaries = favoritesBLL.GetRealTimeFavoritesList();
            foreach (FavoriteSummary summary in summaries)
            {

                if (summary.isOnline)
                {
                    OnlineFavoritesUserNames.InnerHtml += "<p>" + summary.you.UserName + "</p>";
                    if (summary.isAvailableForIM)
                        FavoritesChatIcon.InnerHtml += "<p><img src='../Images/FavoritesList/send-message.png' onclick=\"NewIMWindow('" + summary.you.UserName + "')\"; style='width: 15px; height: 13px;'></img></p>";
                    else
                        FavoritesChatIcon.InnerHtml += "<p></p>";
                }
                else
                {
                    OfflineFavoritesUserNames.InnerHtml += "<p>" + summary.you.UserName + "</p>";
                }
            }
        }
    }

Favorites.js

function UpdateFavoritesList() {

var url = AjaxEnginePage + Category  + "&Action=GetRealTimeFavoritesList";
$.getJSON(url, null, function (results) {
    UpdateFavoritesListDisplay(results)
});


function UpdateFavoritesListDisplay(favoritesArray) {
$(".OnlineFavoritesUserNames")[0].innerHTML = "";
$(".FavoritesChatIcon")[0].innerHTML = "";
$(".OfflineFavoritesUserNames")[0].innerHTML = "";

if (favoritesArray["FavoriteSummary"].length !== 0) {
    for (var i = 0; i < favoritesArray["FavoriteSummary"].length; ++i) {
        if (favoritesArray["FavoriteSummary"][i].isOnline == "True") {
            $(".OnlineFavoritesUserNames")[0].innerHTML += "<p>" + favoritesArray["FavoriteSummary"][i].yourUserName + "</p>";
            if (favoritesArray["FavoriteSummary"][i].isAvailableForIM == "True") {
                $(".FavoritesChatIcon")[0].innerHTML += "<p><img src='../Images/FavoritesList/send-message.png' class='FavoritesChatIcon' onclick=\"NewIMWindow('" + favoritesArray["FavoriteSummary"][i].yourUserName + "')\" /></a></p>";
            }
            else {
                $(".FavoritesChatIcon")[0].innerHTML += "<p></p>";
            }
        }
        else {
            $(".OfflineFavoritesUserNames")[0].innerHTML += "<p>" + favoritesArray["FavoriteSummary"][i].yourUserName + "</p>";
        }
    }
}
else {
    $(".OnlineFavoritesUserNames")[0].innerHTML += "<p>No Favorites</p>";
}
}
}     

最佳答案

您根本不需要在服务器端生成此标记。 您已经有一个有效的 ajax 调用,它将获取数据并在 javascript 中生成标记。因此,您应该在页面加载时以及每 10 秒调用一次。即:

UpdateFavoritesList();  
setInterval(function () {
    UpdateFavoritesList();
    }, 10000); 

这样,当页面加载时,您可以立即运行 ajax 调用并填充标记,并且可以从 Page_Load 方法中删除所有重复代码。

关于javascript - ASP.NET Page_Load 与 AJAX 页面刷新代码重用/冗余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26820115/

相关文章:

javascript - 使用 Flash + JavaScript 进行客户端压缩

c# - 如何在 C# 中对 XmlDocument 中的元素的子元素进行排序?

javascript - 在带有溢出的 div 中使用 AOS(滚动动画)

c# - 如何写一个c#日志文件?

c# - 线程内的 Threading.Timer 和 Timer 之间的区别

html - 将 TD 扩展到最大可用宽度

c# - ASP.Net C# - 在图表中设置和显示 x 轴值

asp.net - 如何验证我的 ASP.NET session 数据是否可以正确序列化?

javascript - Cordova 应用寻找未知的 favicon.ico

javascript - 如何在 html 和 javascript 中放置“停止”和“重置”按钮