Ниже приведен рабочий пример кода, однако я часто нахожу, что я пишу только контент Page_Load, чтобы найти себе переписывание того же типа кода, делающего то же самое на странице после загрузки через ajax (чтобы избежать обратной передачи) .. ..ASP.NET Page_Load против повторного использования кода обновления страницы AJAX/резервирования?
Я не могу не думать, что должен быть какой-то лучший (возможно, объектно-ориентированный) способ манипулировать и создавать динамические методы HTML, которые мы должны поддерживать после начальной загрузки страницы .NET, не обновляя всю страницу ,
В приведенном ниже примере кода вы можете предположить, что 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>";
}
}
}
Спасибо @Keith, но это заставляет меня чувствовать, что .NET на самом деле ничего не делает. Это общий способ сделать что-то подобное? Есть что-то лучше? – Kulingar
Если вы хотите, чтобы ваш .Net-код выполнял большую часть работы, вы можете изменить AjaxEnginePage для создания разметки. Таким образом, все ваши javascript нужно будет просто заменить. Это также означает, что вся ваша разметка создается и обслуживается с сервера. – Keith
Но чтобы ответить на ваш вопрос: «Это общий способ сделать что-то подобное?» Лично я считаю, что это становится все более распространенным явлением. Все больше и больше серверный код используется только для доставки json-объектов клиенту, а фреймворки javascript заботятся о создании разметки. Взгляните на angular.js и ember.js. Мое мнение таково, что это будет только расти в будущем. Создание вашего сайта таким образом также означает, что другие клиенты (например, телефонные приложения) могут их использовать. – Keith