У меня есть страница, которая создается полностью динамически в коде позади (о, радость).
При нажатии кнопки на этой странице на страницу добавляется больше элементов - и это нормально, однако обновленная страница не появляется до следующей обратной передачи. Я бы сделал перенаправление, но хочу сохранить состояние любых данных, введенных в существующие элементы управления.
Итак - мне нужно вызвать обратную передачу с кода сервера за кодом. Я полагаю, что это включает в себя вставку некоторого js-кода, но кроме этого я совсем не испытывал радости.
Вот пример, чтобы прояснить ситуацию:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</div>
</form>
</body>
</html>
Очень простая страница.
Код также прост:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["data"] = 1;
}
PopulatePage();
}
private void PopulatePage()
{
int data = (int)Session["data"];
for (int n = 0; n < data; ++n)
{
TextBox tb = new TextBox();
tb.ID = n.ToString();
PlaceHolder1.Controls.Add(tb);
Literal lit = new Literal();
lit.Text = "<br/>";
PlaceHolder1.Controls.Add(lit);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
int data = (int)Session["data"];
Session["data"] = ++data;
}
}
Вы нажимаете кнопку, и добавляются дополнительные элементы управления. Это способ проще, чем страница, с которой у меня возникают проблемы, но она демонстрирует проблемы, с которыми я сталкиваюсь.