问题描述:

What is the correct way to dynamically change the View (the view aspx) that a controller method uses versus using the standard naming convention.

I'm guessing it has something to do with the ViewResult and ViewName, but what is the correct syntax?

Update:

One thing I forgot... is there a way to do this without having the "action" or method name not be part of the resulting URL?

For example,

If I wanted to have a list of all the states in the USA.

http://localhost/list/states

(displays a simple list of state names)

And If I wanted to have a list of the 50 largest cities in the USA.

http://localhost/list/largest-cities

(displays the city and the population - two column grid)

So I'd like to be able to pull in different "formatters" depending on the list name.

Should I do that in a single action / multiple views?

Could I then use Routes to hide the View name in the URL?

What is the best way to approach this?

网友答案:

Just use the method that takes the name of the view to choose. Be careful, though. Most times what you probably want to do is redirect to a different action instead. Returning a different view won't change the url like redirecting will.

string name = ...figure out which view you want...

return View( name );
网友答案:

If you need to render a different view from a controller action dynamically, you can simply supply a value to the base.View() method (or the ViewResult constructor). The location of the view will always be (for the web forms view engine):

/Views/{Controller}/{View}.aspx

Edit: (Thanks to Ithi) It could also be in:

/Views/Shared/{View}.aspx
相关阅读:
Top