WebUserControl动态内容?
问题描述:
我已经创建了一个WebUserControl,它包含三个html控件,两个按钮和一个输入文本。这些控件中的每一个都有静态标识,这是错误的,我不这么认为。控件事件使用javascript进行初始化,控制传递给客户端后,告诉我他希望放置五个,如果此用户控件在同一页上,每个事件都有不同的参数。任何触发的事件都会初始化所有用户控件,因为JavaScript采用TextBox用户标识。WebUserControl动态内容?
下面是代码:
//Markup code in user control, each control have a static id
<input id="Text_Output" type="text" runat="server" onkeypress="return saveValue(event);" />
<input id="Button_Add" type="button" runat="server" value="ˆ"
style="width:21px; height:14px;vertical-align:bottom;" />
<input id="Button_Subtract" type="button" runat="server" value="ˇ"
style="width:21px; height:14px;vertical-align:top;" />
//Javascript function Add() in user control
function Add(incValue, percValue) {
var outputValue = document.getElementById('<%=Text_Output.ClientID%>').value;
var incremeantValue = incValue;
var precsionValue = percValue;
if (outputValue.indexOf(".") > 0) {
var total = (parseFloat(outputValue) + parseFloat(incremeantValue));
document.getElementById('<%=Text_Output.ClientID%>').value = parseFloat(total).toFixed(parseInt(percValue)).toString();
}
else {
if (percValue == 0) {
document.getElementById('<%=Text_Output.ClientID%>').value = parseInt((parseFloat(outputValue) + parseFloat(incremeantValue)).toString());
}
else {
var total = (parseFloat(outputValue) + parseFloat(incremeantValue));
document.getElementById('<%=Text_Output.ClientID%>').value = parseFloat(total).toFixed(parseInt(percValue)).toString();
}
}
}
//Markup code used in webpage
//This button will connect(initialize) the events for the user control
<input id="Button1" type="button" value="button" onclick="IntilizeControl()" /><br />
<My:UserInfoBoxControl ID="JSNumeric_Control" runat="server" />
//Javasript InilizeControl() function
function IntilizeControl() {
var Button_Add = document.getElementById('<%=JSNumeric_Control.FindControl("Button_Add").ClientID %>');
//Add(IncrementValue,PrecesionValue)
Button_Add.setAttribute("onclick", "Add(1,1)", '<%=JSNumeric_Control.FindControl("Text_Output").ClientID%>');
var Button_Subtract = document.getElementById('<%=JSNumeric_Control.FindControl("Button_Subtract").ClientID%>');
//Subtract(IncrementValue,PrecesionValue)
Button_Subtract.setAttribute("onclick", "Subtract(1,1)");
var Text_Output = document.getElementById('<%=JSNumeric_Control.FindControl("Text_Output").ClientID%>');
alert('<%=JSNumeric_Control.FindControl("Text_Output").ClientID%>');
Text_Output.setAttribute("onkeyup", "check()");
Text_Output.value = 0;
}
如果我添加其他用户的控制,将用相同的一切,即使我已经改变了用户控件的ID上的document.getElementById部分初始化,我希望每个用户控件都拥有自己的客户端ID,这样每个用户都可以按照自己的方式进行操作?
答
//Send the controlClientID from the source code.
function Add(incValue, percValue,controlID) {
//The controlID.name.replace(/\$/g, '_') will replace the $ sign by the _ character.
var outputValue = document.getElementById(controlID.name.replace(/\$/g, '_')).value;
var incremeantValue = incValue;
var precsionValue = percValue;
if (outputValue.indexOf(".") > 0) {
var total = (parseFloat(outputValue) + parseFloat(incremeantValue));
document.getElementById(controlID.name.replace(/\$/g, '_')).value = parseFloat(total).toFixed(parseInt(percValue)).toString();
}
else {
if (percValue == 0) {
document.getElementById(controlID.name.replace(/\$/g, '_')).value = parseInt((parseFloat(outputValue) + parseFloat(incremeantValue)).toString());
}
else {
var total = (parseFloat(outputValue) + parseFloat(incremeantValue));
document.getElementById(controlID.name.replace(/\$/g, '_')).value = parseFloat(total).toFixed(parseInt(percValue)).toString();
}
}
}
我解决了它,我所做的是在用户控件内更改我的JavaScript代码以接受新参数controlClientID,并使用此ID代替Text_Output – 2011-12-19 14:12:01