C# - コードでResponse.Writeが使用されている場合、ASPボタンが機能しない

okwaves2024-01-25  7

それで、私はしばらく前から asp.net を使って作業しているのですが、まだ原因がわからないこのバグに遭遇しました。

私の aspx ファイル:

<%@ Page Title="Incomes and Outcomes" Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true" CodeBehind="IncomePage.aspx.cs" Inherits="AccountingSite.IncomePage" EnableEventValidation="false"%>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<link rel="stylesheet" href="Res/display.css"/>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<div class="cont">
 <div class="text-center">
    <p class="box-main">Incomes and Outcomes</p>
</div>
<br />

<br />
<div class="row">
    <div class="col50 b1">
     <asp:TextBox runat="server" placeholder="Description" ID="inputDesc"></asp:TextBox>
    </div>
    <div class="col50 b1">
     <asp:TextBox runat="server" placeholder="Value" ID="inputValue"></asp:TextBox>
    </div>
</div>
<br />
<div class="row">
    <div class="col50 b1 autocomplete">
        <asp:TextBox runat="server" placeholder="Customer" ID="inputCustomer"
            AutoCompleteType="Disabled" ClientIDMode="Static"></asp:TextBox>
    </div>
</div>
    <br />
<div class="text-center">
    <asp:Button runat="server" Text="Add" CssClass="sub topBtn" ID="AddBtn"
        OnClick="AddIncome_Click" CausesValidation="false"/>
    <asp:Button runat="server" Text="Remove selected" CssClass="sub-remove topBtn"
        OnClick="RemoveIncome_Click" CausesValidation="false"/>
</div>
<br />
<br />
  <div class="row text-center">
    <label style="font-size: 18px;">Date:</label>
    <input type="date" id="inputDate" runat="server" onchange="ValueChanged();"/>
    <asp:Button runat="server" ID="SOME_BTN" ClientIDMode="Static" Text="Test"
        OnClick="SOME_BTN_Click" CssClass="asdf" CausesValidation="false"/>
  </div>
    <br />
    <div class="row">
        <div class="colThird topRow text-center f1">
            <label>Description</label>
        </div>
        <div class="colThird topRow text-center f1">
            <label>+</label>
        </div>
        <div class="colThird topRow text-center f1">
            <label>-</label>
        </div>
    </div>
                      <%
                          Response.Write("<h1>Test</h1>");
                          //Write();
                      %>
</div>
<script>
    function ValueChanged() {
        var sb = document.getElementById("<%=SOME_BTN.ClientID %>");
        sb.click();
    }
</script>
</asp:Content>

cs ファイル:

    public partial class IncomePage : System.Web.UI.Page
{
    bool running = false;
    public double pos = 0;
    public double neg = 0;
    private static string[] Customers;

    protected void Page_Load(object sender, EventArgs e)
    {
        Main.CurrentPage = IPage.IncomePage;
        if (Session["Logged"] == null)
        {
            //Response.Redirect("LoginPage.aspx");
            //return;
        }
    }

    protected void AddIncome_Click(object sender, EventArgs e)
    {
        Main.Send(this, "test");
        
    }

    protected void RemoveIncome_Click(object sender, EventArgs e)
    {
        Main.Send(this, "test");
    }

    public void Write()
    {
        
    }

    public double GetBalance()
    {
        return Main.GetBalance();
    }

    protected void SOME_BTN_Click(object sender, EventArgs e)
    {
        if(inputDate.Value != null)
        {
            var x = DateTime.Parse(inputDate.Value).ToString().Split(' ')[0];
            Response.Redirect("IncomePage.aspx?d="+x);
        }
    }

}

メソッド Main.Send() は JavaScript コードでalert() を実行するため、デバッグの目的で使用されます。

(上記のコードに示すように) aspx ファイルに Response.Write() を追加すると、ASP ボタンが機能しなくなり、クリック イベントがまったく発生しなくなるようです。奇妙なことに、コードは他の aspx ファイルではまったく問題なく実行されます。



------------------------

必要がない場合は、Response write を使用しないでください。ren のように、多くのことが台無しになります。デリングとスタイルシート。代わりに、ラベルのテキストを設定し、必要に応じてそのラベル (Visible = true) を表示することを検討してください。

経由でアラート ボックスを使用することもできます。
 ScriptManager.RegisterStartupScript(Page, Page.GetType(), "alrt", "alert('+ " label.Text + "');", true);  

コードビハインドから関数を呼び出すこともできます

 ScriptManager.RegisterStartupScript(Page, Page.GetType(), "func", "functioName();", true); 

1

問題は、私が作業しているこのページが、データベースに基づいて一連の div と要素を作成するという点で動的であるため、基本的にデータベースに含まれるものを表示することです。 Main.Send メソッドは、上で説明したことを正確に実行します。

– Java99 さん

2020 年 9 月 5 日 9:39

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。