我有一個Web部件,它動態插入使用C#編寫的VS2010中編寫的div標籤。我想爲這些div實現鼠標懸停事件。當Web部件部署到SP2010上時,當我用我指定的控件ID搜索它們時,我的JavaScript無法找到這些div。在我的SharePoint 2010 Web部件中查找div
當我檢查頁面源代碼時,我發現像ct100_m_g_
這樣的一些標籤是前面指定的控件ID的前綴。
我怎樣才能猜出這些ID?
我有一個Web部件,它動態插入使用C#編寫的VS2010中編寫的div標籤。我想爲這些div實現鼠標懸停事件。當Web部件部署到SP2010上時,當我用我指定的控件ID搜索它們時,我的JavaScript無法找到這些div。在我的SharePoint 2010 Web部件中查找div
當我檢查頁面源代碼時,我發現像ct100_m_g_
這樣的一些標籤是前面指定的控件ID的前綴。
我怎樣才能猜出這些ID?
ctlxxx的東西被ASP.NET自動預置爲控件的ID,以生成客戶端ID。
如果要設置確定性客戶端ID,則可以設置ClientID屬性而不是ID屬性。請參閱http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientid.aspx
將webpart的多個實例添加到一個頁面時,靜態ID不會導致問題嗎? – 2011-05-01 00:21:21
是的,它肯定會......您可以設置一個確定性(如可預測)但非靜態的ID,並假設頁面上可能呈現多個Web部件。 – Zach 2011-05-01 09:41:39
謝謝,我不得不使用clientidmode屬性,它的工作。再次感謝 – user731999 2011-05-02 09:02:22
在webparts中,您可以使用客戶端ID在JavaScript中查找您的控件。看看這個例子,它會變得很清楚:
using System;
using System.Text;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
namespace MyDemo.WebParts
{
public class MyWebPart : WebPart
{
private TextBox txtInput;
private TextBox txtOutput;
private Button btnDoSomething;
protected override void CreateChildControls()
{
base.CreateChildControls();
txtInput = new TextBox();
Controls.Add(txtInput);
txtOutput = new TextBox();
txtOutput.ReadOnly = true;
Controls.Add(txtOutput);
btnDoSomething = new Button();
btnDoSomething.Text = "Do Something";
btnDoSomething.OnClientClick = string.Format("DoSomething('{0}', '{1}'); return false;", txtInput.ClientID, txtOutput.ClientID);
Controls.Add(btnDoSomething);
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
// Check if the script is already registered, this is necessary because the webpart can be
// added multiple times to the same page
if (!Page.ClientScript.IsClientScriptBlockRegistered("MyWebPartScript"))
{
StringBuilder sb = new StringBuilder();
sb.Append("function DoSomething(inputControlID, outputControlID){");
sb.Append(" var inputControl = document.getElementById(inputControlID);");
sb.Append(" var outputControl = document.getElementById(outputControlID);");
sb.Append(" outputControl.value = inputControl.value;");
sb.Append("}");
Page.ClientScript.RegisterClientScriptBlock(GetType(), "MyWebPartScript", sb.ToString(), true);
}
}
protected override void RenderContents(System.Web.UI.HtmlTextWriter writer)
{
EnsureChildControls();
writer.Write("<table>");
writer.Write("<tr><td>");
txtInput.RenderControl(writer);
writer.Write("</td><td>");
txtOutput.RenderControl(writer);
writer.Write("</td></tr><tr><td colspan=\"2\">");
btnDoSomething.RenderControl(writer);
writer.Write("</td></tr></table>");
}
}
}
謝謝,我不得不使用clientidmode屬性靜態和事情開始按預期工作。非常感謝你 – user731999 2011-05-02 09:02:49
你可以給你的每個DIV生成一個類。那麼,只需使用類名選擇它們並添加事件處理程序即可。
這是用於可視Web部件還是Web控件(不是ascx)? – 2011-04-30 04:21:07