Javascript 同一页面上有更多ascx实例
我有一个asp.net ascx调用ProductSearch 在ascx中,我有以下4个控件Javascript 同一页面上有更多ascx实例,javascript,asp.net,user-controls,ascx,Javascript,Asp.net,User Controls,Ascx,我有一个asp.net ascx调用ProductSearch 在ascx中,我有以下4个控件 <asp:TextBox runat="server" ID="txtSearchProduct" type="text" class="form-control typeahead" data-provide="typeahead" autocomplete="off"> </asp:TextBox> <asp:TextBox runat="server" ID="tx
<asp:TextBox runat="server" ID="txtSearchProduct" type="text" class="form-control typeahead" data-provide="typeahead" autocomplete="off">
</asp:TextBox>
<asp:TextBox runat="server" ID="txtProductNames" CssClass="hidden">
</asp:TextBox>
<asp:TextBox runat="server" ID="txtSearchProductID" Style="display: none;">
</asp:TextBox>
<asp:TextBox runat="server" ID="txtCaricati" Style="display: none;">
</asp:TextBox>
在这个ascx中,我有一个javascript函数,用所有可能的值填充typeahead文本框:
function LoadProducts() {
var data = $("#<%=txtProductNames.ClientID%>").val();
var $input = $(".typeahead");
var jsonObj = $.parseJSON(data);
var sourceArr = [];
for (var i = 0; i < jsonObj.length; i++) {
sourceArr.push(formatRow(jsonObj[i].id, jsonObj[i].code, jsonObj[i].name));
}
// init Typeahead
$input.typeahead({
...
}
函数加载产品(){
变量数据=$(“#”)val();
var$input=$(“.typeahead”);
var jsonObj=$.parseJSON(数据);
var sourceArr=[];
对于(var i=0;i
现在,问题是我有一个aspx页面,它需要实现两次ascx。
一个在主体div中,一个在模态div中(在模态不可见时被html隐藏)
使用F12工具浏览html时,我发现我有两次使用相同的函数LoadProducts()
在第一个函数中,函数使用它的ClientId对象,第二个也使用它
我从代码隐藏中调用函数LoadProducts(),然后执行代码中找到的第一个函数,可能是错误的
我需要一个方法来识别javascript函数,具体取决于我使用的是哪个ascx实例
有什么方法可以做到这一点吗?如果我还不够清楚,可以问我一些问题。如果您不想要“全局”LoadProducts,这会更好,那么您需要使每个javascript函数都是唯一的。
为此,您可以使用用户控件本身的ID
所以你可以在ascx里做这个
<script>
function LoadProducts_<%= this.ID %>() {
alert('Products Loaded.')
}
LoadProducts_<%= this.ID %>();
</script>
我认为,即使在同一页上有数百个控件,您也只需要脚本一次。 试试这个。 将脚本移动到服务器端
**check if (!cs.IsClientScriptBlockRegistered(csType, csName))**
我想这是你的主管想要的
<%@ Page Language="C#"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
public void Page_Load(Object sender, EventArgs e)
{
// Define the name and type of the client script on the page.
String csName = "ButtonClickScript";
Type csType = this.GetType();
// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;
// Check to see if the client script is already registered.
if (!cs.IsClientScriptBlockRegistered(csType, csName))
{
StringBuilder csText = new StringBuilder();
csText.Append("<script type=\"text/javascript\"> function DoClick() {");
csText.Append("Form1.Message.value='Text from client script.'; }");
csText.Append("</script>");
cs.RegisterClientScriptBlock(csType, csName, csText.ToString());
}
}
</script>
<html >
<head>
<title>RegisterClientScriptBlock Example</title>
</head>
<body>
<form id="Form1"
runat="server">
<input type="text" id="Message" /> <input type="button" value="ClickMe" onclick="DoClick()" />
</form>
</body>
</html>
公共无效页面加载(对象发送方,事件参数e)
{
//在页面上定义客户端脚本的名称和类型。
字符串csName=“ButtonClickScript”;
类型csType=this.GetType();
//从Page类获取ClientScriptManager引用。
ClientScriptManager cs=Page.ClientScript;
//检查客户端脚本是否已注册。
如果(!cs.IsClientScriptBlockRegistered(csType,csName))
{
StringBuilder csText=新建StringBuilder();
Append(“函数DoClick(){”);
追加(“Form1.Message.value='Text from client script.';}”);
csText.Append(“”);
RegisterClientScriptBlock(csType,csName,csText.ToString());
}
}
RegisterClientScriptBlock示例
您可以将LoadProducts()
放置在ascx外部,并将其称为witjLoadProducts(“”)
在ascxI内部需要在ascx内部调用它。我把这个ascx放在很多aspx中,我必须到处调用LoadProducts函数是的。但是只有一个ascx,所以你只需要更新一个用户控件。不是它的每个实例。
**check if (!cs.IsClientScriptBlockRegistered(csType, csName))**
<%@ Page Language="C#"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
public void Page_Load(Object sender, EventArgs e)
{
// Define the name and type of the client script on the page.
String csName = "ButtonClickScript";
Type csType = this.GetType();
// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;
// Check to see if the client script is already registered.
if (!cs.IsClientScriptBlockRegistered(csType, csName))
{
StringBuilder csText = new StringBuilder();
csText.Append("<script type=\"text/javascript\"> function DoClick() {");
csText.Append("Form1.Message.value='Text from client script.'; }");
csText.Append("</script>");
cs.RegisterClientScriptBlock(csType, csName, csText.ToString());
}
}
</script>
<html >
<head>
<title>RegisterClientScriptBlock Example</title>
</head>
<body>
<form id="Form1"
runat="server">
<input type="text" id="Message" /> <input type="button" value="ClickMe" onclick="DoClick()" />
</form>
</body>
</html>