Поиск элемента div в моей веб-части SharePoint 2010 - PullRequest
2 голосов
/ 30 апреля 2011

У меня есть веб-часть, которая динамически вставляет теги div, написанные на VS2010, с использованием C #. Я хочу реализовать события наведения мыши для этих элементов. Когда веб-часть развернута на SP2010, мой JavaScript не может найти эти элементы div, когда я просто ищу их по указанному мною идентификатору элемента управления.

Когда я проверил источник страницы, я обнаружил, что некоторые теги, такие как ct100_m_g_, имеют префикс к указанному мною идентификатору элемента управления.

Как я могу угадать эти идентификаторы?

Ответы [ 3 ]

1 голос
/ 30 апреля 2011

Материал ctlxxx автоматически добавляется к идентификатору элемента управления ASP.NET для генерации идентификатора клиента.

Если вы хотите установить детерминированный идентификатор клиента, вы можете установить свойство ClientID вместо свойства ID. Смотри http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientid.aspx

0 голосов
/ 03 мая 2011

Вы могли бы дать каждому из ваших DIV класс при генерации.THEN, просто используйте имя класса, чтобы выбрать их и добавить обработчик события.

0 голосов
/ 01 мая 2011

В веб-частях вы можете использовать идентификатор клиента, чтобы найти ваши элементы управления в 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>");
        }
    }
}
...