ASPX页面上的C#值在刷新时合并
本文关键字:刷新 合并 ASPX | 更新日期: 2023-09-27 18:28:17
我正在开发一个网页,它可以提取用户分数并将分数计入百分比。然后使用百分比来填充Bootstrap进度条,使用宽度和aria值now。
问题是,在初始构建和页面刷新后,进度条宽度(也称为分数)会增加原始分数。例如,如果百分比从40开始,它将刷新为80…120…160…等等。
这是我分配值的C#代码:
private static string[][] matches = new string[numOfGames][];
private static string[] winningTeams = new string[numOfGames];
protected static string[,] players = { { "Name", "0" }, { "Name", "0" }, { "Name", "0" }, { "Name", "0" }, { "Name", "0" }, { "Name", "0" }, { "Name", "0" }, { "Name", "0" }, { "Name", "0" } };
public static double score_name1, score_name2, score_name3, score_name4, score_name5, score_name6, score_name7, score_name8, score_name9;
protected void Page_Load(object sender, EventArgs e) {
gatherMatches();
DataTable userPicks = getGSheetData();
userPicks.Columns.Remove( "Timestamp" );
userPicks.Columns.Remove( "Your Name" );
convertTeamNames();
compareMatches();
generateUserScores( userPicks );
score_name1 = Convert.ToDouble( players[0, 1] ) / numOfGames * 100.00;
score_name2 = Convert.ToDouble( players[1, 1] ) / numOfGames * 100.00;
score_name3 = Convert.ToDouble( players[2, 1] ) / numOfGames * 100.00;
score_name4 = Convert.ToDouble( players[3, 1] ) / numOfGames * 100.00;
score_name5 = Convert.ToDouble( players[4, 1] ) / numOfGames * 100.00;
score_name6 = Convert.ToDouble( players[5, 1] ) / numOfGames * 100.00;
score_name7 = Convert.ToDouble( players[6, 1] ) / numOfGames * 100.00;
score_name8 = Convert.ToDouble( players[7, 1] ) / numOfGames * 100.00;
score_name9 = Convert.ToDouble( players[8, 1] ) / numOfGames * 100.00;
name2.Attributes.Add( "style", "width: " + score_name2.ToString() + "%" );
name2.Attributes.Add( "aria-valuenow", players[0, 1].ToString() );
}
为了示例起见,替换了实际名称值。
在ASPX页面中:
<%@ Page Title="Scoreboard" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Scoreboard.aspx.cs" Inherits="Football.Scoreboard" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<div class="page-header">
<h2><%: Title %></h2>
<h3>See up to date standings.</h3>
</div>
<p>This page can be refreshed during game time to see changes in leaders as they happen.</p>
<div class="row">
<div class="col-md-6">
<h3>This Week</h3>
<div class="progress">
<div id="name1" class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="5" aria-valuemin="0" aria-valuemax="16" style="width: 0%">
Name
</div>
</div>
<div class="progress">
<div id="name2" runat="server" class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="16">
Name
</div>
</div>
<div class="progress">
<div id="name3" class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="4" aria-valuemin="0" aria-valuemax="16" style="width: 0%">
Name
</div>
</div>
<div class="progress">
<div id="name4" class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="3" aria-valuemin="0" aria-valuemax="16" style="width: 0%">
Jen
</div>
</div>
<div class="progress">
<div id="name5" class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="1" aria-valuemin="0" aria-valuemax="16" style="width: 0%">
Name
</div>
</div>
<div class="progress">
<div id="name6" class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="16" style="width: 0%">
Name
</div>
</div>
<div class="progress">
<div id="name7" class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="16" style="width: 0%">
Ryan
</div>
</div>
<div class="progress">
<div id="name8" class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="16" style="width: 0%">
Name
</div>
</div>
<div class="progress">
<div id="name9" class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="16" style="width: 0%">
Name
</div>
</div>
</div>
我只将操作应用于第二个进度条,因为其他人目前没有数据。
我在你的问题中推断了很多,但在你的代码中要考虑这两个因素。
1在Page_Laod代码中,您可能必须使用Page函数IsPostBack()if(!IsPostBack){//做你只在第一次加载时做的工作//将Progress设置为0,将init变量设置为0}其他的{//添加或执行此页面仅加载数学}
2现在还可以消除静态数学和页面变量。
此外:第二个进度条的html中没有将百分比设置为0。
当它第一次加载和失败时,请查看渲染的html源。这将为你提供问题所在的线索。
编辑:
静态变量-我想看看你是否正在从一个静态变量中读取一个值。尽量不要使用您创建的静态变量。尝试从getGSheetdata()获取所有当前数据另一种说法是,您不应该在Page_Load函数上方声明任何变量。所有值都应该以新值开头,如0(在这种特定情况下)您的下一步应该是在数据更改点上设置一个断点,并观察代码的每一步中您的值会发生什么。
我确实找到了解决方案。由于某种原因,2D数组的值在每次刷新时都会保持不变,所以当我调用gatherUserScores(userPicks)时;它会将当前的分数添加到旧的分数上,从而按原始数字增长。
我通过添加以下循环每次重置阵列来解决这个问题:
for ( int i = 0; i < players.Length / 2; i++ )
{
players[i, 1] = "0";
}
我发现,通过检测页面刷新的时间并不再运行代码,可能可以防止值持续存在的原因,但即使我发现了一些例子,我也没有运气,所以这种方法效果最好。
谢谢你们的帮助。