В моем приложении я использую pjax для частичного ответа на странице. Насколько я понимаю, pjax нуждается в одном и том же URL-адресе для частичного и полного ответа, например, следующий URL-адрес для обслуживания списка пользователей:
Полный ответ: //ваш сайт/пользователи
Частичный ответ: //youwebsite/users (вместе с заголовком X-PJAX)
Если URL-адрес запрашивается с заголовком X-PJAX, требуется частичный ответ, то есть только список пользователей, тогда как, если такого заголовка нет, от сервера требуется полный ответ, то есть полная страница (заголовок, тело, нижний колонтитул и т. д. вместе со списком пользователей.)
Для этого я создал обработчик http для обработки такого рода условных ответов. Для этого я сделал свой TestHandler.ashx:
<%@ WebHandler Language="C#" Class="TestHandler" %>
#region Using Directives
using System;
using System.Web;
using System.Web.Compilation;
using System.Web.UI;
#endregion
public class TestHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
if (context.Request.Headers["X-PJAX"] != null)
{
Type page_type = BuildManager.GetCompiledType("~/Templates/users.aspx");
Page page = (Page)Activator.CreateInstance(page_type);
page.ProcessRequest(context);
}
else
{
Type page_type = BuildManager.GetCompiledType("~/users.aspx");
Page page = (Page)Activator.CreateInstance(page_type);
page.ProcessRequest(context);
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
Приведенный выше код возвращает ответ со страницы Templates/users.aspx, если в запросе присутствует заголовок X-PJAX. Страница Templates/users.aspx содержит HTML-код для списка пользователей. Если этот заголовок отсутствует, нам нужно дать полный ответ, который дается со страницы ~/users.aspx.
Мои вопросы:
Верен ли мой подход к обработке условного ответа на основе заголовка. Перед внедрением pjax у меня была только одна страница «~/users.aspx», чтобы дать полный ответ. Чтобы реализовать pjax, я перенаправил запрос на страницу пользователя в TestHandler через маршрутизацию, чтобы TestHandler мог решить, какой ответ необходим.
Можем ли мы дать частичный ответ только со страницы «~/users.aspx» без реализации httphandler?
Как вы подходите к веб-формам ASP.NET с условными ответами?