2011-12-27 2 views
0

私は少し損失があります。私たちはasp.net Questionaireを持っており、ビジネスルールとSQLのデータに基づいて動的に作成されています。ダイナミックコントロールがたくさんあるASP.NETページのJQuery

ダイナミックテーブルであるquestionaireは、最大21の質問を持つことができ、応答(ラジオボタンはい、いいえ、進行中、なし)とより多くのビジネスルールに基づいて、さまざまなことが起こる必要があります。

追加の質問が右側の列に表示される場合や、ユーザーが追加データを入力する必要があるテキストボックスがある場合があります。応答の説明が必要なコメントが必要な場合があります。また、応答。

これは、JavaScriptの悪夢になっています。現在、各ラジオボタンにonclickイベントを追加し、そのラジオボタンに適用されるいくつかのビジネスルールを渡しています。

私がもっている最大の問題は、行番号、応答などに基づいてすべてのコントロールにidsが与えられることです。したがって、javascript関数では、必要なコントロールのIDを情報に基づいてまとめようとしていますonclickイベントの関数に渡されます。

私たちは動作していますが、それほどエレガントではなく、メンテナンスの悪夢になる可能性が高いコードです。それは私にはJQueryを使うより良い方法がなければならないようです。どこから始めたらいいのかわかりません。私はこれが意味をなさないことを願っています。誰かがこの混乱を書き直すのに使うことができるこのようなものの示唆またはサンプルを持っていることを願っています。

ここでは非常に非常に短縮版のjavascriptです。

function radioButtonListOnClick1(buttonValue, QuestionNumber, hasInput, hasSubs, hasAdditional, isAdditional) 
{ 
    var ClientID; 
    var HidField = $("#HiddenFieldClientID"); 
    if (HidField.length == 1) 
    { 
     ClientID = HidField[0].value + "_"; 
    } 
    var ColumnName = ClientID + "radioQuestionColumn" + QuestionNumber; 
    if (buttonValue == "InProgress") 
    { 
     document.getElementById(ColumnName).className = 'tdInProgress'; 
    } 
    if ((buttonValue == "Yes") || (buttonValue == "NotApplicable")) 
    { 
     document.getElementById(ColumnName).className = 'tdYes'; 
    } 
    if (buttonValue == "No") 
    { 
     document.getElementById(ColumnName).className = 'tdNo'; 
    } 
} 

listItem.Attributes.Add("onclick", "radioButtonListOnClick('" + Response + "', '" + QuestionNumber + "', '" + hasInput + "', '" + hasSubs + "', '" + hasAdditional + "', 'no');"); 

ここでは、さまざまな応答のルールのような質問の例を示します。

1)あなたの不在時にあなたのために記入できる代替ユーザーの名前がありますか? yes - テキストボックスとテキストを表示します - 「従業員の名前を入力してください」(列の色は白) no - これがなぜ必要か、誰を選ぶべきかを説明するSharepoint文書へのリンクを表示します(列の色は赤です) 進行中 - 列の色は黄色です

答えて

0

あなたはコンビナトリアルやグラフの問題に遭遇したような音で、問題を解決するためには強引な解決策を使用しています。測量分岐条件を定義できるサーベイツールを常に使用することができます。これにより、ブルートフォースソリューションを構成可能なソリューションに移行することができます。これは、一般的なサーベイツールを手動でコーディングするより簡単です。 .NETアプリケーションに直接統合できるようにするサードパーティ調査システムが多数あります。

もう1つの解決策は、ビジネスルールエンジンを統合することです。ビジネスルールエンジンはあなたの問題に対する抽象的な解決策かもしれません。私の投票は、サードパーティの調査コンポーネントをソリューションに統合し、そこに条件付きのパスを設定し、アンケート結果をエンドユーザーに表示し、調査結果を報告する作業をすべて行うようにすることでしょう。

0

jQueryを使用するようにJSを書き直すことで、JSをきれいに整理することはできますが、それは本当にあなたの質問ではないようです。

問題が発生していて、さまざまなコントロールIDを管理している場合は、手動でコードを作成するのではなく、ASP.NETを使用してJavaScript(またはjQuery)を動的に生成することを検討しましたか?

トラッキングするオブジェクトがASPである場合。NETコントロールを使用すると、IDを設定してClientIDMode="static"を使用すると役立ちます。また、Control.ClientIDプロパティを使用して、割り当てられたコントロールID文字列(ダイナミックJSなど)にアクセスすることもできます。

関連する問題