Обновить содержимое в файле .ascx - PullRequest
3 голосов
/ 24 августа 2009

Поскольку файлы .ascx естественным образом отображаются в начале жизненного цикла страницы, если я хочу обновить информацию в форме, находящейся за пределами части .ascx, как обновить файл .ascx, чтобы отразить изменения, скажем, при нажатии нажмите (тот же, что сохраняет информацию)?

Например (псевдокод):

Sub Page_load
    'user control is naturally rendered here'
End Sub

Sub Button_Click
    SaveStuff()
    ReRenderUserControl()
End Sub

Ответы [ 3 ]

4 голосов
/ 24 августа 2009

Если вы создаете пользовательский элемент управления, который создается на основе сохраненных данных. Что вы можете сделать, это создать метод, который выполняет это построение, а затем вызвать его на странице и в пользовательском элементе управления (псевдокод):

UserControl:

protected Page_Load(object sender, EventArgs e)
{
    BuildControlBasedOnData();
}

public BuildControlBasedOnData()
{
    // Build the user control based on saved data
} 

Страница вызова:

Button_Click(object sender, EventArgs e)
{
    UserControl1.BuildControlBasedOnData();    
}
3 голосов
/ 24 августа 2009

Элементы управления пользователя (файлы .ascx) визуализируются в течение жизненного цикла содержащей страницы, как вы упомянули. Когда вы делаете постбэк нажатием кнопки на содержащей странице, при загрузке постбэка пользовательский элемент управления будет полностью перерисован. Если вам требуется, чтобы пользовательский элемент управления содержал различную информацию при этой загрузке, вы можете сделать много вещей:

  • В вашем пользовательском элементе управления перейдите в хранилище данных и верните информацию, необходимую во время события загрузки или любого другого надлежащего события (привязка данных элемента управления и т. Д.)
  • На странице загрузки вашего содержимого странице, присвойте значения свойствам ваш UserControl, который вы используете в различные аспекты пользователя Контроль. Эти ценности могут прийти из хранилища данных или строки запроса или что угодно.

Есть также много других вариантов. Если вы говорите о частичных постбэках или вещах типа AJAXy, то вам, вероятно, придется использовать JavaScript для обновления различных частей вашего пользовательского элемента управления (если вы не используете UpdatePanels, чего не следует делать, потому что они дьявол) .

2 голосов
/ 24 августа 2009

Я придумал, как мне кажется, несовершенное, но полезное решение. Все, что я сделал, это сделал функцию Page_Load в моем файле .ascx Public, а затем вызвал ее после сохранения моей информации. Это позаботилось о моей проблеме.

Если у кого-нибудь есть более элегантное решение, пожалуйста, дайте мне знать!

...