You are absolutely right that, given the flexibility of ASP MVC, you can do something here regarding folder structure. If you used ASP.NET WebForms, remember that MVC is completely different in that it does not use folders and files as a direct resource mapping, and the routes are based on controllers and actions. It can get used to when you are used to doing it "ASP classic."
So, the main consideration is what matters the most to you and your users, and that everything is clear, where everything is.
Perhaps the folder structure should be Product / Import / Template. the problem that I see in this case is that Import is not really an object. I see that this is a controller, but it really should be an action. If I use this structure, should I place Upload.aspx View in the Import folder (to replace the mentioned Product / Import.aspx above)? It seems a little awkward.
Yes, it looks like your controllers should have an “Import” action, “Send action”, etc. .... Each of them may have a corresponding view in this folder for viewing controllers, but the templates themselves probably don't must be representations. Your templates are just a resource that the action of the controller will refer to when importing products. In this case, normal routing would not be a problem, and I would not place the templates as folders. The identifier places them in a central place and refers to them in all my controllers, which need to get access to them for the import action.
You can use something like this:
MyApp project Controllers ProductController Models Product ImportTemplate Template1 Template2 Views Product Import.aspx Edit.aspx Index.aspx etc…
Import.aspx or Upload.aspx can be pages on which the user can select a template and import products (or display columns and save a new template). Each view will have a corresponding controller action. Your actions to import or load your controllers will directly access template files; all you have to do is enable the link to the ImportTemplate folder in your controller (or Model, Service Layer ... anywhere the template will be used)
using MyApp.ImportTemplate
When the user is on the product import page, the URL will look like /Product/Import/ , and the template itself will not necessarily appear in the URL unless you pass it as the /Product/Import/templateID or /Product/Import?templateID=123456 parameter /Product/Import?templateID=123456 .
Again, the key is to do what works best for your projects, and allows you to organize and clean things up in such a way that you can save time when you create / deploy your application.
For example, I try to divide things into two or more projects to make it easier for me when the time comes for deployment. As an example, I might have a folder structure like this:
App.UI project Content CSS Scripts Images Views App.Core project (any code that will be compiled) Controllers Templates Models Helpers Interfaces Repositories ViewModels
Then all I need to deploy is the App.UI project, and everything in App.Core will be compiled and included in the App.UI\bin