*Самая последняя указана выше.
Хорошо, даже после обновления Мэтта есть обходной путь;)
Во-первых, мы должны использовать страницу с form
внутри. В противном случае мы не сможем добавить элемент управления ScriptManager
. Еще одно: элемент управления ScriptManager
должен быть первым элементом управления в форме. Дальше проще:
Page page = new Page();
Button button = new System.Web.UI.WebControls.Button
{
ID = "btnSumbit",
Text = "TextButton",
UseSubmitBehavior = true
};
HtmlForm form = new HtmlForm
{
ID="theForm"
};
ScriptManager scriptManager = new ScriptManager
{
ID = "ajaxScriptManager"
};
form.Controls.Add(scriptManager);
form.Controls.Add(button);
page.Controls.Add(form);
using (StringWriter output = new StringWriter())
{
HttpContext.Current.Server.Execute(page, output, false);
context.Response.ContentType = "text/plain";
context.Response.Write(output.ToString());
}
Это работает. Вывод довольно большой, поэтому я решил не включать его в свой ответ :)
На самом деле, есть обходной путь. Да, мы можем отобразить элемент управления в обработчике.
Во-первых, нам нужна бесформенная страница. Потому что без него мы получаем:
Элемент управления 'btnSumbit' типа 'Кнопка' должен быть помещен внутри тега формы с runat=server.
public class FormlessPage : Page
{
public override void VerifyRenderingInServerForm(Control control)
{
}
}
Во-вторых, никто не может помешать нам создать экземпляр нашей страницы FormlessPage
. А теперь давайте добавим туда элемент управления (я решил добавить элемент управления Button
для примера, но вы можете использовать любой).
FormlessPage page = new FormlessPage();
Button button = new System.Web.UI.WebControls.Button
{
ID = "btnSumbit",
Text = "TextButton",
UseSubmitBehavior = true
};
page.Controls.Add(button);
В-третьих, давайте зафиксируем вывод. Для этого используем метод HttpServerUtility.Execute
:
Выполняет обработчик для указанного виртуального пути в контексте текущего запроса. System.IO.TextWriter
фиксирует выходные данные выполненного обработчика, а логический параметр указывает, очищать ли коллекции System.Web.HttpRequest.QueryString
и System.Web.HttpRequest.Form
.
Вот код:
using (StringWriter output = new StringWriter())
{
HttpContext.Current.Server.Execute(page, output, false);
context.Response.ContentType = "text/plain";
context.Response.Write(output.ToString());
}
Результат будет:
<input type="submit" name="btnSumbit" value="TextButton" id="btnSumbit" />
Кроме того, я могу порекомендовать статью ScottGu Совет/подсказка: крутая техника шаблонизации пользовательского интерфейса для использования с ASP.NET AJAX для сценариев без UpdatePanel. Надеюсь, вы могли бы найти там много полезного.
person
Alex
schedule
28.04.2010