ASP.NET页面上的JQuery有很多动态控件

时间:2011-12-27 23:57:51

标签: jquery asp.net

我有点失落。我们有一个asp.net Questionaire,它是根据业务规则和SQL数据动态创建的。

问卷是一个动态表,最多可以有21个问题,根据响应(单选按钮是,否,正在进行,NA)和更多业务规则,需要进行不同的事情。

有时其他问题会显示在右栏中,或者它可能有一个文本框,用户需要输入其他数据,有时只需要带有响应说明的评论,我也会根据回复更改单元格的颜色。

它已经变成了javascript的噩梦。目前,我们正在为每个单选按钮添加一个onclick事件,并传递一些适用于该radiobutton的业务规则。

我遇到的最大问题是所有的控件都是根据行号,响应等给出ID的。所以在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)您是否有替代用户的名字可以在您缺席的情况下为您填写? 是 - 显示文本框和文本 - “请输入员工姓名”(列颜色为白色) 否 - 显示指向sharepoint文档的链接,该文档解释了为什么需要这样做以及应该选择谁(列颜色为红色) 进行中 - 列颜色为黄色

2 个答案:

答案 0 :(得分:0)

听起来你遇到了组合或图形问题,并且你正在使用强力解决方案来解决问题。您始终可以使用调查工具来定义调查分支条件 - 这会将您的强力解决方案转移到可配置的解决方案中,这可能比手动编写通用调查工具更容易。有许多第三方调查系统允许您直接集成到.NET应用程序中。

另一种解决方案可能是集成业务规则引擎。但是,业务规则引擎可能过于抽象,无法解决您的问题。因此,我的投票可能是将第三方调查组件集成到您的解决方案中,并在那里配置条件路径,让它完成将调查呈现给最终用户的所有工作,并报告调查结果。

答案 1 :(得分:0)

你当然可以通过重写它来使用jQuery来清理你的JS,但看起来这不是你的问题。

如果问题是生成和管理各种控件ID,您是否考虑过使用ASP.NET动态生成JavaScript(或jQuery),而不是尝试手动编写代码?

如果您要跟踪的对象是ASP.NET控件,则在设置ID并使用ClientIDMode="static"时也可能会有所帮助。您还可以使用Control.ClientID属性访问指定的控件ID字符串(例如在动态JS中)。