【发布时间】:2014-11-08 17:41:36
【问题描述】:
以下是代码的工作示例,但是我经常发现自己编写 Page_Load 内容只是为了发现自己在通过 ajax 加载后重新编写相同类型的代码在页面上执行相同类型的事情(以避免回发)。 ...
我不禁认为必须有某种更好的(可能是面向对象的)方法来操作和创建我们需要在初始 .NET 页面加载后维护的动态 HTML 方法,而无需刷新整个页面。
在下面的代码示例中,您可以假设 AjaxEnginePage 是一个现有的 .NET 页面,可以适当地解析查询字符串,并且 GetRealTimeFavoritesList() 返回一个适当的对象列表,其中包含需要在 C# 或 JavaScript 中解析的所有信息,来自回到那个时候,我们 GET 代码可重用性,但是我们如何在 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>";
}
}
}
【问题讨论】:
标签: javascript c# asp.net ajax entity-framework