Привет Допустимо ли переопределять метод «Рендеринг» при создании пользовательской веб-части в SharePoint? У меня есть веб-часть, которая наследуется от System.Web.UI.WebControls.WebPart. Я добавляю элементы управления в коллекцию элементов управления в «CreateChildControls», а затем переопределяет метод «Render» для рендеринга html и элементов управления.SharePoint WebPart + переопределить метод визуализации
У меня возникли некоторые проблемы, когда я использую раскрывающийся список, но хочу знать, правильный ли мой подход или нет, прежде чем я попытаюсь исправить проблему, связав выпадающий список.
Edited
Я инициализировать мои раскрывающиеся списки и добавить его в коллекцию элементов управления в «CreateChildControls». В конце этого метода я называю «BindData», который связывает мой раскрывающийся список, и если я редактирую существующую запись, он связывает данные выпадающего списка и устанавливает правильный выбранный индекс. Затем я обрабатываю элементы управления в методе «Рендеринг». Вот фрагмент кода
protected override void CreateChildControls()
{
base.CreateChildControls();
this.EnsureUpdatePanelFixups();
ddlClient = new DropDownList();
ddlClient.ID = "ddlClient";
ddlClient.SelectedIndexChanged += new EventHandler(ddlClient_SelectedIndexChanged);
ddlClient.AutoPostBack = true;
ddlClient.ValidationGroup = __VALIDATIONGROUP;
ddlClient.Width = ObjCtrlWidth;
upClient = new UpdatePanel();
upClient.ID = "upClient";
upClient.UpdateMode = UpdatePanelUpdateMode.Conditional;
upClient.ContentTemplateContainer.Controls.Add(ddlClient);
this.Controls.Add(upClient);
//More controls here
BindData();
}
«ddlClient является„DropDownList“,„upClient“является обновление панели. Да, у меня есть одна панель обновления для одного выпадающего списка, и я обновить другие обновления панелей с использованием метода обновления .
Это метод «Рендер»
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
//stuff here
writer.RenderBeginTag(System.Web.UI.HtmlTextWriterTag.Td);
upClient.RenderControl(writer);
writer.RenderEndTag();
//stuff here
}
Мой метод «BindData» вызывает другие методы связывания, которые связывают различные раскрывающиеся списки и это, как один из них переплетена
private void BindData()
{
BindClientTypes();
//binding other drop down lists here
//If an existing record isbeing edited, this method will get the data from db and bind all the controls
BindMEA();
}
private void BindClientTypes()
{
DataTable dt = DB.GetAllClientTypes();
if (dt == null)
{
ltGlobalErrorMsg.Text = GlobalErrorMessage;
ltGlobalErrorMsg.Visible = true;
}
else
{
ddlClient.ClearSelection();
ddlClient.DataSource = dt;
ddlClient.DataValueField = "ID";
ddlClient.DataTextField = "Name";
ddlClient.DataBind();
ddlClient.Items.Insert(0, PleaseSelectItem);
ddlClient.ClearSelection();
}
}
В моей BindMEA, я следующий
ddlClient.ClearSelection();
ddlClient.Items.FindByValue(objMea.ClientTypeID.ToString()).Selected = true;
я получаю ошибку, которая говорит, что управление не может быть два выбранных индексов. Но есть только один в любой момент времени. Состояние сбрасываемых изменений меняется, но когда дело доходит до рендера, он взрывается.
Я не могу понять, почему
Спасибо.
Что произойдет, если вы не сделать .selected = верно. Какой элемент затем выбирается? –
Вы очищаете правильный выбор. Мое следующее предположение могло бы быть, используете ли вы элемент PleaseSelectItem в нескольких раскрывающихся списках, что означает один и тот же экземпляр? Читать комментарии - http: // geekswithblogs.net/ranganh/archive/2006/05/03/77072.aspx –
Да, я не понимал, что использую его в разных местах. – iJK