Запрет частичного просмотра от загрузки - PullRequest
5 голосов
/ 06 декабря 2010

Как я могу предотвратить загрузку частичного представления, набрав http://mydomain.com/site/edit/1 Есть ли способ сделать это?

/ Martin

Ответы [ 2 ]

8 голосов
/ 06 декабря 2010

Если вы загружаете свои партиалы через Ajax, вы можете проверить, присутствует ли HTTP-заголовок запроса HTTP_X_REQUESTED_WITH, и его значение равно XMLHttpRequest.

Когда через браузер делается запрос о том, что заголовок отсутствует

Вот очень простая реализация атрибута Action Filter, который сделает всю работу за вас

public class CheckAjaxRequestAttribute : ActionFilterAttribute
{
    private const string AJAX_HEADER = "X-Requested-With";

    public override void OnActionExecuting( ActionExecutingContext filterContext ) {
        bool isAjaxRequest = filterContext.HttpContext.Request.Headers[AJAX_HEADER] != null;
        if ( !isAjaxRequest ) {
            filterContext.Result = new ViewResult { ViewName = "Unauthorized" };
        }
    }
}

Вы можете использовать его для оформления любого действия, где вы хотите проверить, является ли запрос запросом ajax

[HttpGet]
[CheckAjaxRequest]
public virtual ActionResult ListCustomers() {
}
5 голосов
/ 06 декабря 2010

Я считаю, что атрибут [ChildActionOnly] - это то, что вы ищете.

[ChildActionOnly]
public ActionResult Edit( int? id )
{
   var item = _service.GetItem(id ?? 0);
   return PartialView( new EditModel(item) )
}

У Phil Haack есть статья, в которой он используется здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...