Мне нужно было сделать что-то очень похожее, и я использовал механизм просмотра nvelocity из MVCContrib - технически вы могли бы использовать механизм просмотра aspx по умолчанию, но я обнаружил, что синтаксис nvelocity гораздо проще для выпуск сценария (не волнуйтесь, если вы не использовали его раньше - я потратил около 10 минут, чтобы выяснить это!).
Тогда вам просто нужно добавить маршрут в таблицу маршрутов, чтобы обработать направление вашего .js url к действию!
EDIT
Не могу проверить это, так как у меня нет визуальной студии, но для маршрута у вас может быть что-то вроде этого:
RouteTable.Routes.Add(new Route
{
Url = "[controller]/[action].js",
Defaults = new { controller="home", requestType="javascript" }, // Whatever...
RouteHandler = typeof(MvcRouteHandler)
});
RouteTable.Routes.Add(new Route
{
Url = "[controller]/[action]",
Defaults = new { controller="home"}, // Whatever...
RouteHandler = typeof(MvcRouteHandler)
});
Запросы, заканчивающиеся на .js, должны проходить по первому маршруту - запросы без расширений переходят ко второму.
Тогда ваше действие может иметь параметр requestType:
public ActionResult MyAction (RequestType requestType)
{
if(requestType == RequestType.JavaScript)
{
... new nvelocity view to render javascript
}
else
{
...
}
}
Что касается структуры каталогов - вы сами по себе! Не потому, что я не хочу быть полезным, а скорее потому, что у вас есть гибкость, чтобы делать с ней то, что вы хотите!