ASPX页面上的C#值在刷新时合并

C# values on ASPX page combine on refresh

本文关键字:刷新 合并 ASPX      更新时间:2023-09-26

我正在开发一个网页,它可以提取用户分数并将分数计入百分比。然后使用百分比来填充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>

我只将操作应用于第二个进度条,因为其他人目前没有数据。

我在你的问题中推断了很多,但在你的代码中要考虑这两个因素。

1Page_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";
        }

我发现,通过检测页面刷新的时间并不再运行代码,可能可以防止值持续存在的原因,但即使我发现了一些例子,我也没有运气,所以这种方法效果最好。

谢谢你们的帮助。