3

チェックボックスに問題があります。たとえば、私はこのaspxのコードを持っています

<asp:Content ID="MainContent" ContentPlaceHolderID="MainContent" runat="server">
     <asp:CheckBox ID="chkActive" AutoPostBack="True" OnCheckedChanged="Active_OnCheckedChanged" runat="server"></asp:CheckBox>
     <asp:TextBox ID="txtName" runat="server"></asp:TextBox>
</asp:Content>

サーバー側では、chkActive がチェックされている場合、2 つのレンダリングされたコントロールがあります。

  • ctl00$MainContent$chkActive
  • ctl00$MainContent$txtName

chkActive がチェックされていない場合、レンダリングされたコントロールは 1 つだけです。

  • ctl00$MainContent$txtName

そのため、そのチェックボックスのステータスをデータベースに書き込むことはできません。記録のために、私は動的オブジェクトでSaveData関数を使用し、チェックを外すとchkActiveが消えたため、この関数はそれを見つけることができませんでした. チェックボックスがオフの場合でもチェックボックスを表示するアイデアはありますか? ありがとう。

PS:「消えた」とは、チェックを外すと Request.Form にないことを意味します。

編集:

私の SaveData 関数:

public void SaveDate<T>(T entity, NameValueCollection attributes)
    {
        PropertyInfo[] properties = typeof(T).GetProperties();
        foreach (PropertyInfo property in properties)
        {
            if (attributes.AllKeys.Any(key => key.Contains("$" + property.Name)))
            {
                //
            }
        }            
    }

チェックボックスがRequest.Formになくなったため、para属性はRequest.Formからのものであるため、処理方法がわかりません。この機能は、チェックボックスがチェックされている場合にうまく機能します

4

3 に答える 3

1

ASP.NET は、formブラウザーのネイティブ機能を使用して、データをサーバーに返します。

チェックボックスを「チェック」すると、データはRequest.Formデータの一部として返され、ASP.NET はこの情報をポストバック ライフ サイクルの一部として使用して、チェックボックスが「チェック」されたことを認識できます。

しかし、チェックボックスが「チェックされていない」場合、データにはエントリがありませRequest.Form。ASP.NET がチェックボックスがチェックされていないことを知るために使用するのは、このデータの欠如です。

これは、フォーム投稿の一部としてのチェックボックスの通常の動作です。

于 2012-09-10T12:19:20.190 に答える
1

他の人が言及したように、チェックボックスの値 (チェックされていない) はサーバーに返されないため、Request.Formコレクションには表示されません。

しかし...関数では、値がViewStateに戻されるため、サーバー側のオブジェクトを使用できます(それがある場合)。

this.chkActive.Checkedクライアントでオフにして送信した場合、ポストバックで false にする必要があります。

それでも を使用したいRequest.Form場合は、エントリがコレクションに存在するかどうかをいつでも確認できます。そこにない場合は、チェックボックスが false であるか、チェックされていません。

if(Request.Form["chkActive"] == null)
  // checkbox is unchecked
else
  // checkbox is checked

編集

チェックボックスをRequest.Formコレクションに表示するには、非表示の入力をフォームに追加し、チェックボックスと同じ名前を付けます。

<input type="hidden" value="false" name="chkActive" />

チェックボックスの OnClick イベントにクライアント側のイベント ハンドラーを追加します。オンにすると、非表示の入力の無効なプロパティが true に設定されます。オフの場合、disabled プロパティを false に設定します。無効化されたコントロールは、チェックされていないチェックボックスのようにサーバーに送り返されません。

于 2012-09-10T12:25:37.667 に答える
0

チェックボックスは、チェックされていない場合は値を持たないため、ブラウザは返されるフィールドにチェックボックスを含めません。これは ASP.NET とは関係なく、HTML フォームがどのように機能するかということです。

ただし、ASP.NET WebForms コントロールのチェックボックスは (viewstate のおかげで) その状態を認識しており、チェックされているかどうかを示します。次のように、Request.Form コレクションを使用する代わりに、チェックボックス オブジェクトを直接クエリするだけです。

if( this.chkActive.Checked ) { ...
于 2012-09-10T12:20:08.037 に答える