web-dev-qa-db-ja.com

ドロップダウンリストの選択した値が機能しない

私のASP.NETプロジェクト。 2つのドロップダウンリストとチェックボックスがあります。チェックボックスがオンの場合、選択したDropDownList1の値は、DropDownList2の選択した値と同じである必要があります。しかし、DropDownList1.SelectedValueは機能していません。

これが私のコードです:

protected void chkSameBAddress_CheckedChanged(object sender, EventArgs e)
{
    try
    {
        if (this.chkSameBAddress.Checked == true)
        {

          this.txtcSAddress1.Text=  this.txtcBAddress1.Text;
          this.txtcSAddress2.Text = this.txtcBAddress2.Text;
          this.txtcSAddress3.Text = this.txtcBAddress3.Text;
          this.txtcSAddress4.Text = this.txtcBAddress4.Text;
          this.txtcSCity.Text = this.txtcBCity.Text;
          this.txtcSPostCode.Text = this.txtcBPostCode.Text;
          this.txtcSState.Text = this.txtcBState.Text;

          this.ddlcSCountry.Items.FindByValue(ddlcBCountry.SelectedItem.Value).Selected = true;


        }

    }
    catch (Exception ex)
    {
        logger.Error(ex.Message);
        throw;

    }
}

上記の例に見られるように、chkSmaeBAddressがチェックされている場合、選択されたddlcSCountryの値はddlcBCountry選択された値と同じでなければなりません。

11
user998405

これらのドロップダウンリストコントロールのどこにデータをバインドしますか?次のように、これらはページの初期読み込み時にのみバインドされます。すべてのページの読み込みでそれらをバインドしているため、選択した値が表示されなくなると思います。

_protected void Page_Load(object sender, EventArgs e)
{

    if (!Page.IsPostBack)
    {
        //Please check if you are binding checkbox controls here. 
        //If not bring them in here
    }
}
_

他の条件は、ddlcSCountryとddlcBCountryの両方が選択できるように同じ値を持つ必要があることです。そうでない場合、ddlcSCountry.Items.FindByValue(ddlcBCountry.SelectedItem.Value)はnullになり、Selectedプロパティを設定しようとするとエラーがスローされます

上記の条件が両方とも問題なければ、コードは機能するはずです。

[〜#〜] edit [〜#〜]申し訳ありませんが、コメント付きのコードは、チェックボックスではなくドロップダウンリストコントロールのバインディングをチェックするものでなければなりません。だからそれは

_//Please check if you are binding both dropdown list controls here. 
//If not bind them within the if (!Page.IsPostBack)
_

_CheckedChanged event_内のif (this.chkSameBAddress.Checked == true)行にブレークポイントを配置し、それが実行されていることを確認してから、ランタイム値...

19
Kaf

確かにあなたはドロップダウンボックスを等しくしようとしていますか?

使用する

ddlcSCountry.SelectedIndex = ddlcSCountry.FindStringExact(ddlcBCountry.Text);

これにより、フィールド内のテキストを設定するだけでなく、リスト内の一致するオプションが選択されます。これは、テキストオプションに基礎となる値がある場合に非常に役立ちます。

2
Doomsknight

受け入れられた解決策は、最も一般的な原因に対する明白な解決策ですが、これを引き起こす可能性のあるもう1つの驚くべき問題があります!

リストの値はデータベースから取得され、値にはデータベース値からの改行とキャリッジリターンが含まれていました:\r\n。これらの値は無害なスペースのように見えますが、実際にはそうではありません!

私の解決策は、これらの隠されたChar値を削除することでした。それが役に立てば幸い。

2
Oliver Lundt

DropDownListのプロパティでAutoPostBackがtrueに設定されていることを確認してください。

0
bmich72

chkSameBAddress.AutoPostBackはtrueに設定されています。それが設定されていても機能しない場合は、 pdatePanel コントロールを使用するか、JavaScriptを使用してそのロジックをクライアントに移動することを検討してください。

0
npclaudiu

<select runat="server" id="test1"></Select>を使用するように切り替えるだけで、コードの背後にあるわずかな変更を加えるだけで、すべてがうまく機能しました。

0
Jeff George

選択してみてください

ddlcSCountry.Text=ddlcBCountry.SelectedItem.Value;

必要なアイテムを選択します

0
Likurg