5

多数のコントロール (20 ~ 40) を含む複数のフォームがあるという問題が発生しています。問題は、ポストバックを処理するときに、それらの値を変数に入れる必要があり、それらが asp.net サーバー コントロール (つまり、select、input など) でない場合、それらが存在することを確認する必要があることです。したがって、チェックされていないプレーンなhtmlチェックボックスがある場合、それはサーバーに投稿されず、その値を取得する前にその存在を確認する必要があります。その後、それらをメソッドに渡してデータベースに保存する必要があります。このメソッドは、すべての私の不満とビジネスの検証を処理します。これを設定するのは面倒で、非常に時間がかかります。これを処理するために人々は何をしていますか?ASP.Net 4.0 Web フォームと VB.Net を使用しています。1 つの考えは、http コンテキストをメソッドに渡し、メソッド内のコードで値を検索できるようにすることでした。それでも、それほど良い解決策ではないようです。この問題に遭遇したのは私だけではないことを知っているので、アドバイスをいただければ幸いです。前もって感謝します。

ウェイド

4

4 に答える 4

1

Web フォームごとに、フォーム上にある可能性があるすべてのフィールドを持つパブリック プロパティを持つモデル クラスを作成します。名前、検証、およびデフォルト値の属性を作成し、それらをプロパティに適用します。ポストバック中に、必要なモデル クラスを見つけ、インスタンスを作成し、そのパブリック プロパティを反復して適用します。ポストにプロパティ名のフィールドがある場合は値を検証してフィールドに適用し、そうでない場合はデフォルトを適用します。のようなもの(私はc#を使用しますが、とにかく明らかだと思います)

MyCrudModelForSomeForm {
    [MyWebFormField(Default = 42, Type = typeof(int), Name = "txtAmount")]
    public int SomeInt { get; set; }
    [MyWebFormField(Default = "Hello", Type = typeof(string), Name = "txtMessage", Validate = "$[A-Z]{6}^")]
    public string SomeString { get; set; }
    [MyWebFormField(Default = "Zimbabwe", Type = typeof(string), Name = "txtCountryChoice")]
    public string SomeOtherString { get; set; }
}

これは基本的に、MVC コンセプトからの M(odel) のカスタム実装です。

于 2013-03-14T13:40:56.463 に答える
1

チェックボックスがチェックされていない場合など、一部のコントロールが値をポストバックしない瞬間から、2 つのオプションがあります。

  1. ポストバックの前後のすべてのコントロールを知る/または
  2. コントロールのすべての名前を JavaScript で作成し、隠しフィールドに戻します。

これで、ポストバックで、投稿されたすべての値がすべてHttpContext.Current.Request.Form読み取れる場所に表示されます。

クライアント側では、単純な javascript または jQuery を使用して、すべての入力コントロールのリストを作成し、非表示の入力で送信できます。次に例を示します。

var inputs, index, cNames = ""; 
inputs = document.getElementsByTagName('input');
for (index = 0; index < inputs.length; ++index) {
    cNames += "&" + inputs[index].name;
}   

document.getElementById("AllControls").value = cNames;

またはjQueryと同じ

    var cAllNames = "";
    $('input').each(function() {
        cAllNames += "&" + $(this).attr("name");
    });
    jQuery('#AllControls').val(cAllNames);

あなたのページには、次のような隠しコントロールがあります

<input type="hidden" name="AllControls" id="AllControls" />

投稿には、次のような行にコントロールのすべての名前があります。

AllControls=&__VIEWSTATE&__EVENTVALIDATION&cbBoxTest&AllControls&Button1

そこで文字列を分割し、各名前を で区切って、&何が使用され、何が使用されていないかを確認できます。そのコントロールに関する追加情報を渡すことができます - それぞれの名前を送るのと同じ方法です。

于 2013-03-08T01:22:49.620 に答える
0

ASP.NET Webforms アーチは複数のフォームをサポートしていません

複数のフォームを持つページを作成した場合は、jQuery を使用し、個々のフォームを尊重されたハンドラーに投稿してリクエストを処理することをお勧めします。

これはシンプルでエレガントになります

于 2013-03-12T07:17:43.297 に答える