2017-07-18 12 views
2

特定のListItemが選択されたときに<div>が表示されようとしています。私のコードでユーザが特定のドロップダウンリスト項目をクリックした場合、私のパネルが表示されない

私が持って後ろに:あなたは調達のためのドロップダウンリストのAutoPostBackのを有効にする必要が

:私はいくつかのことを必要と述べた

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
{      
    if (reportedBefore.SelectedItem.Text=="yes") 
    { 
     reportedBeforePanel.Visible = true; 
    } 
    else 
    { 
     reportedBeforePanel.Visible = false; 
    }     
} 

私が最初にthis article here呼び、サーバー側のOnSelectedIndexChangedイベント。

AutoPostBack="true" 
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged 

確かに、私は前にAutoPostBackを持っていませんでした。それを追加した後、依頼された何らかの理由で私はまだdivが表示されないことを恐れています。

<asp:DropDownList ID="reportedBefore" CssClass="larger-drop-2" AutoPostBack="true" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> 
      <asp:ListItem Text="Select" Value="Select"></asp:ListItem> 
      <asp:ListItem Text="No" Value="No"></asp:ListItem> 
      <asp:ListItem Text="Yes" Value="Yes"></asp:ListItem> 
      <asp:ListItem Text="Unsure" Value="Unsure"></asp:ListItem> 
</asp:DropDownList> 
    <asp:Panel ID="reportedBeforePanel" runat="server" Visible="false"> 
      <div id="showDiv"> 
       <label for="yesDetails"> 
       Please provide details 
       </label> 
     <asp:TextBox ID="yesDetails" CssClass="third-w-form" runat="server"/> 
      </div> 
    </asp:Panel> 

ここで私を助けてくれる人がいますか?

答えて

1

問題は、次のif -conditionである:

reportedBefore.SelectedItem.Text=="yes" 

これにより、ケースを実行しています(これは.NETのデフォルトですが)ドロップダウンリストの値は異なる方法("はい""はい")で書かれています。いずれか、この問題を解決する大文字と小文字を区別しない文字列比較

string.Compare(reportedBefore.SelectedItem.Text, "yes", true) == 0 

又はif -statementケーシングの変更を行うために

+0

こんにちは!ありがとう。私の愚かなこと、私は知っていたはずだった。私はif文を "Yes"に変更しましたが、私はまだ運がありません。私はあなたに私のCodeFile https://jsfiddle.net/buaxvz8c/1/を表示するためにこれを作った - ありがとう! – davvv

+0

ブレークポイントを設定して、選択したアイテムが変更されたときにポストバックが実際に発生するかどうかを確認できますか? – Markus

+0

それはちょうどそれMarkus、私はポストバックoccoursとは思わない。通常は少しレンダリングされますが、何も得られません。最も奇妙です。 – davvv

1

C#が大文字と小文字が区別されるので、"Yes"がない"yes"です:

reportedBeforePanel.Visible = reportedBefore.SelectedItem.Text == "Yes"; 

Alternatievelyあなたがこれを使用することができます。

reportedBeforePanel.Visible = reportedBefore.SelectedItem.Text.Equals("yes", StringComparison.InvariantCultureIgnoreCase); 
+0

こんにちはTim!私は何か非常に間違っているかもしれないことを恐れる。あなたのメモを考慮に入れても、私はif文を変更しましたが、何らかの理由で私はまだ運がありません。あなたは私のCodeFileがOKであることを確認できますか? http://jsfiddle.net/buaxvz8c/1/ – davvv

+0

@davvv:これはうまくいくはずです。少なくとも、パネルがクライアントサイドのhtmlでdivとしてレンダリングされることが保証されています。もちろん、 'showDiv'を見えないようにするCSSやjavascriptを使うこともできます。しかし、あなたは示されていません。 –

+0

ありがとうTim。私はそれを隠すCSS/JSを持っていません。 'showDiv'はCSSで実際に宣言されていませんか? – davvv

関連する問題