How to distinguish whether the call is ajax or not and display the page accordingly in MVC?

StackOverflow https://stackoverflow.com/questions/20607839

  •  02-09-2022
  •  | 
  •  

Pregunta

Let's say I have a default project in MVC. I change the About link to be an Ajax form so that it only loads that part of the page. And of course I change the method to return PartialView('About') instead of View('About'). However, the problem arises when a user types in and goes to a link called localhost:port/Home/About. Now it loads about part but without the layout (without css, js, menu bars, etc.)! How can I prevent him from going into such page? Or maybe display an error page instead? Or even redirect him to go to View('About')? Options are endless, but how to know that the call was in a "wrong" way?

¿Fue útil?

Solución

Add ChildActionOnly attribute to the controller method so MVC will not let user call it directly via http://localhost:port/Home/About

Otros consejos

You can check in your action method if a request is ajax or not with

Request.IsAjaxRequest()

and take whatever action you need based on this.

This checks if the X-Requested-With header has been set to XMLHttpRequest by the calling client.

Detecting IsAjaxRequest() with ASP.NET MVC and JQuery Form Plugin / File Upload

as @Zabavsky it is seems like a duplicate...

another (very simple) solution may be to just seprate the methods. you anyway have seperate views. so the ajax call will trigger AboutAjax() and render the partialView and About() stays as is.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top