2011-11-09 8 views
1

マイクロソフトのサイトにいくつかのバグを投稿しました。本当のバグだったのですが、MSFTはデザインとして閉じます[と私はほとんどの人がMSFTを好んだと思っていました]。ここに私は彼らが設計によってclasifyすると確信しているものがありますが、これは深刻なバグです。これはバグかどうか - ASP.NETリクエストパラメータ

これはASPXページ(NET 3.5)のすべてです。あなたはこの

<input type="text" id="mytextbox" name="mytextbox" /> // still it below the existing one 
txt = Request.Params["mytextbox"]; // change to this line instead of TextBox1 

のような別の単純なHTMLテキストボックス(未ASP)が含まれている場合

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>   
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Submit" /><br /> 

<asp:Label ID="lblOutput" runat="server" Text="Label"></asp:Label> 

分離コード

protected void Page_Load(object sender, EventArgs e) 
    { /* this works */ 
     if (IsPostBack) 
     { 
      string txt = string.Empty; 

      txt = Request.Params["TextBox1"]; 

      lblOutput.Text = "You entered : " + txt; 
     } 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { /* this does not */ 
      string txt = string.Empty; 

      txt = Request.Params["TextBox1"]; 

      lblOutput.Text = "You entered : " + txt; 

    } 

は今それからそれは両方の場所で動作します。

答えて

0
protected void Button1_Click(object sender, EventArgs e) 
{ /* Now this works which is weird but it does */ 
    If(IsPostback) 
    { 
     string txt = string.Empty; 

     txt = Request.Params["TextBox1"]; 

     lblOutput.Text = "You entered : " + txt; 
    } 
} 

私は質問を閉じる必要があります。

0

これは、この例では本当に基本的なことですから、バグだとはっきりと疑っています。あなたがRequestオブジェクトを使用するように強制されている場合は、コードビハインド

マークアップ

<asp:PlaceHolder ID="PlaceHolder1" runat="server"> 
    <asp:TextBox ID="TextBox1" runat="server" /> 
    <asp:TextBox ID="TextBox2" runat="server" /> 
    <asp:TextBox ID="TextBox3" runat="server" /> 
    <asp:TextBox ID="TextBox4" runat="server" /> 
    ... 
</asp:PlaceHolder> 

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Submit" /><br /> 
<asp:Label ID="lblOutput" runat="server" Text="Label"></asp:Label> 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    foreach (TextBox txtCtrl in PlaceHolder1.Controls.OfType<TextBox>()) 
    { 
     //append the textbox value to the label 
     lblOutput.Text += String.Format("{0}<br/>", txtCtrl.Text); 
    } 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    List<TextBox> txtList = PlaceHolder1.Controls.OfType<TextBox>().ToList(); 

    for (int ctrlIndex = 0; ctrlIndex < txtList.Count; ctrlIndex++) 
    { 
     TextBox txtCtrl = txtList.ElementAt(ctrlIndex); 
     if (txtCtrl != null) 
     { 
      lblOutput.Text += String.Format("{0}<br/>", txtCtrl.Text); 
     } 
    } 
} 
+0

これは単なるテストケースでした。私の実際のプログラムには約30のパラメータがあり、Request.Param ['label1]、label2などを使ってループしています。私はそれをテストコードで動作させていますが、実際のコードではまだ動作しませんが、通常のテキストボックスは動作します!私にとっては、ASPは本当に単純なものですが、信じられないほど複雑にしています。 –

+0

もう一度私は既存のコードで作業していますので、それをそのまま使用したいのですが、私の上記のコードはこのバグの内容を説明しています。以前のプログラマーは、新しいaspテキストボックスが問題を作り出すので、通常のtextbox probを使用しました。 –

+1

要求オブジェクトを使用する必要はありません。フレームワークは既にすべての苦労をしているので、あなたはそうする必要はありません。前のプログラマーに嫌悪はしませんでしたが、ASP.NETにあまり似ていないように思えます。私には古典的なASPのハイブリッドアプローチのように見えます。 –

0

:あなたは穀物に逆行しているよう例から、それが見えます代わりに通常のasp:*コントロール、このように使用:

txt = Request["TextBox1"]; 

HttpRequestコレクションをすべてチェックします。

The QueryString, Form, Cookies, or ServerVariables collection member specified in the key parameter. If the specified key is not found, then null is returned.

+0

チップをありがとう。これはこの例では機能しました。 ---実際のコードでは動作しませんでした。間違いなく良いヒント。 –

関連する問題