Обработка на обратно изпращане в рамките на Webpart в Sharepoint

Инициализирам GridView, текстово поле и бутон чрез код към Webpart в CreateChildControls()

Горните контроли се декларират като променливи на класа, но се инициализират едва по-късно.

След това дадох манипулатора за щракване върху бутон. Функцията манипулатор трябва да работи като търсене - извършване на някои операции върху съдържанието, въведено в текстовото поле, зареждане на резултатите в Gridview, показване на Gridview

Когато напиша нещо в текстовото поле и натисна бутона, същите контроли се зареждат отново и съдържанието, въведено в текстовото поле, се губи. Опитах ViewState() и ViewState(), но без резултат. Решетката не се показва, защото моята логика пропуска опитите да я обвържа, тъй като не е наличен подходящ низ за търсене.

Моите въпроси: 1) Къде/как мога да получа стойностите обратно от текстовото поле? 2) Ще има ли смисъл да се попълни GridView в PreRender() или обработката на събития ще се случи след PreRender()?

РЕДАКТИРАНЕ: Изглежда, че манипулаторът на събития не се извиква.

Dim btnClickHandler = New EventHandler(AddressOf SetSearchParameter)
AddHandler srchBtn.Click, btnClickHandler

е вярно?

РЕДАКТИРАНЕ: Преработих целия код от 0. Сега работи.


person Vid L    schedule 28.09.2010    source източник
comment
Манипулаторът за щракване върху бутон също се извършва в CreateChildControls()   -  person Vid L    schedule 28.09.2010


Отговори (2)


трябва да можете да препращате към контролните стойности в манипулатора на събития за щракване върху бутон, в зависимост от това как да ги изградите статични/динамични. (текстово поле)Page.FindControl('controlname').стойност във вашия манипулатор на събития за щракване върху бутон.

ъъ... това.намери контрол.

правя това от паметта, така че синтаксисът може да е изключен.

person brian brinley    schedule 28.09.2010
comment
Според stackoverflow. com/questions/1648447/ и много други ресурси, CreateChildControls() се извиква преди обработката на събитието Postback - няма ли Page.FindControl() да изведе новата контрола вместо това? Опитах и ​​все още не мога да получа стойностите. - person Vid L; 29.09.2010
comment
след като препрочетох вашия коментар, не съм използвал метода, който използвате, за да създадете своя манипулатор на събития. Винаги съм създавал моя метод и съм обвързвал събитието с кликване към него. По-долу е примерен код на прост манипулатор на събития за динамично създаден контрол. - person brian brinley; 29.09.2010
comment
Бутон submitButton = (Button)this.FindControl(submit); submitButton.Click += нов EventHandler(SubmitContactForm); и тук е методът submitContactForm protected void SubmitContactForm(object sender, EventArgs e) {....} вътре в метода, който използвах това, в моя случай това бяха динамични полета на формуляр, за които знаех, че са етикети. // получаваме името на контролата object ctrl = FindControl(controlName); низ controlValue = ((TextBox)ctrl).Текст; - person brian brinley; 29.09.2010
comment
Благодаря за това. Но изведнъж начините ми изглежда работят сега! Премахнах целия код и започнах отново - може би съм пропуснал нещо друго. - person Vid L; 30.09.2010

Това също винаги ме обърква. Винаги се позовавам на този въпрос, за да го разбера ясно ( също и жизнен цикъл на изпълнение на контрола).

  1. Не трябва да се налага да управлявате viewstate, това трябва да се погрижи автоматично от вашите контроли.

  2. Бих предложил да използвате OnPreRender за попълване на вашата мрежа. Вашите контроли трябва да имат своите стойности, попълнени от ViewState дотогава.

person Kit Menke    schedule 28.09.2010
comment
Споменавал съм го и преди и все още не е ясно. Вижте коментара ми за следващия отговор. 1) ViewState дори за динамични контроли? 2) Искам да бъде обвързан само с Postback - добре ли е да проверя Page.IsPostBack в рамките на OnPreRender? - person Vid L; 29.09.2010
comment
Да и на двата въпроса. Ще добавите вашето текстово поле и бутон в CreateChildControls. След това в OnPreRender можете да проверите дали виждате IsPostBack (и дали вашият textbox.Text има стойност) и след това да добавите вашата мрежа / databind. - person Kit Menke; 29.09.2010
comment
Добре благодаря! Сега използвам свой собствен флаг - промяната на персонализираните стойности също води до обратна връзка и някои стойности не винаги могат да бъдат зададени в такива случаи - person Vid L; 30.09.2010
comment
Имайте предвид, че IsPostBack е малко безполезен, ако уеб частта е просто добавена към панела, тъй като логиката за добавяне на контролата се случва като публикация на страницата назад. - person Roman; 12.07.2012