我有点失落。我们有一个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文档的链接,该文档解释了为什么需要这样做以及应该选择谁(列颜色为红色) 进行中 - 列颜色为黄色
答案 0 :(得分:0)
听起来你遇到了组合或图形问题,并且你正在使用强力解决方案来解决问题。您始终可以使用调查工具来定义调查分支条件 - 这会将您的强力解决方案转移到可配置的解决方案中,这可能比手动编写通用调查工具更容易。有许多第三方调查系统允许您直接集成到.NET应用程序中。
另一种解决方案可能是集成业务规则引擎。但是,业务规则引擎可能过于抽象,无法解决您的问题。因此,我的投票可能是将第三方调查组件集成到您的解决方案中,并在那里配置条件路径,让它完成将调查呈现给最终用户的所有工作,并报告调查结果。
答案 1 :(得分:0)
你当然可以通过重写它来使用jQuery来清理你的JS,但看起来这不是你的问题。
如果问题是生成和管理各种控件ID,您是否考虑过使用ASP.NET动态生成JavaScript(或jQuery),而不是尝试手动编写代码?
如果您要跟踪的对象是ASP.NET控件,则在设置ID并使用ClientIDMode="static"
时也可能会有所帮助。您还可以使用Control.ClientID属性访问指定的控件ID字符串(例如在动态JS中)。