2011-12-27 18 views
0

我有點遺憾。我們有一個基於業務規則和SQL數據動態創建的asp.net問卷。有很多動態控件的ASP.NET頁面上的JQuery

問卷是一個動態表格,最多可以有21個問題,根據回答(單選按鈕yes,no,進行中,NA)和更多業務規則,需要發生不同的事情。

有時候,其他問題顯示在右欄中,或者它可能有一個文本框,用戶需要輸入附加數據,有時只需要註釋和響應說明,我還根據以下內容更改單元格的顏色響應。

它已經變成了一個JavaScript的噩夢。目前,我們正在爲每個單選按鈕添加一個onclick事件,並傳入適用於該單選按鈕的一些業務規則。

我最大的問題是所有的控件都是根據行號,響應等給出的id。所以在javascript函數中,我們試圖根據所需信息被傳遞給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)你有沒有替代用戶的名字,可以在你不在的時候填寫你的名字? 是 - 顯示文本框和文本 - 「請輸入員工姓名」(列顏色爲白色) 否 - 顯示指向共享點文檔的鏈接,說明爲什麼需要此選項以及應該選擇誰(列顏色爲紅色) 正在進行 - 列顏色爲黃色

回答

0

聽起來像您遇到了組合或圖形問題,並且您正在使用強力解決方案來解決問題。您始終可以使用調查工具來定義調查分支條件 - 這會將您的蠻力解決方案轉變爲可配置的解決方案,這可能比手工編寫通用調查工具更容易。有許多第三方調查系統可以讓你直接集成到你的.NET應用程序中。

另一種解決方案可能是集成業務規則引擎。儘管如此,業務規則引擎可能對您的問題太抽象了。因此,我的投票可能是將第三方調查組件整合到您的解決方案中,並在那裏配置條件路徑,並讓它完成將調查呈現給最終用戶並報告調查結果的所有工作。

0

你可以通過重寫它來使用jQuery來清理你的JS,但是看起來好像不是你的問題。

如果問題在於生成和管理各種控件ID,是否考慮過使用ASP.NET來動態生成JavaScript(或jQuery),而不是試圖手動編寫它?

如果您正在跟蹤的對象是ASP。NET控件,如果您設置了ID並使用了ClientIDMode="static",它也可能有所幫助。您還可以使用Control.ClientID屬性訪問分配的控件ID字符串(例如在動態JS中)。