Is it i possible to prevent certain PartialViews from being served if requested directly?

为君一笑 提交于 2019-12-02 15:21:47

问题


I'm working on a site that has routes to actions which render Partial Views. A lot of these partial views are components which together make up a complete page.

For instance on a search page I'm working on has a text box, a list of tabs, and a Table.

Seach of these can be accessed with a URL similar to

/Search/SearchPanel
/Search/Tabs/{SearchTerm}
/Search/ResultsTable/SearchTerm?tab=[currently selected tab]

and these are all rendered on with a RenderPartial on my Index page.

When the page loads, it will display each of these components the way I want it. But at the moment there's nothing stopping a user from going directly to the url

/Search/Tabs

to render only a tab control which is meaningless outside the context of the rest of the elements on the page.

Is there a way for me to prevent this?


回答1:


Have you tried marking your Controller method as private?

private PartialViewResult MyPartialResultMethod()

This should allow you to call it from within your code to build up your pages and disallow any public access such as through a URl.

I'm testing this now to make doubly sure my answer is correct so I'll update as I test.

In your tabs example you could simply restrict access by using a second controller method for Tabs that's private.

So you'd have something that looks like:

public ActionResult Tabs(string searchTerm) // When a search term is passed.

and

private ActionResult Tabs() // When no search term is passed.



回答2:


You could create an ActionFilter which checks if the Request.IsAjaxRequest() is true. If it's not (meaning the user is calling the view directly), re-direct accordingly.



来源:https://stackoverflow.com/questions/3316316/is-it-i-possible-to-prevent-certain-partialviews-from-being-served-if-requested

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!