Ну логика для обоих версий все таки будет одна
1. Делать на базе CSS все, тот же bootstrap позволяет делать и мобильную версию одновременно.
2. Так как бизнес-логика остается, делаем такой фокус
https://docs.microsoft.com/ru-ru/dotnet/api/micros...
public class ViewLocationExpander: IViewLocationExpander {
/// <summary>
/// Used to specify the locations that the view engine should search to
/// locate views.
/// </summary>
/// <param name="context"></param>
/// <param name="viewLocations"></param>
/// <returns></returns>
public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations) {
//{2} is area, {1} is controller,{0} is the action
string[] locations = new string[] { "/Views/{2}/{1}/{0}.cshtml"};
return locations.Union(viewLocations); //Add mvc default locations after ours
}
public void PopulateValues(ViewLocationExpanderContext context) {
context.Values["customviewlocation"] = nameof(ViewLocationExpander);
}
}
services.Configure<RazorViewEngineOptions>(options => {
options.ViewLocationExpanders.Add(new ViewLocationExpander());
});
UPD: Все таки, результаты кэшируются, при работе, ну вариант 2, написание собственного RazorViewEngine
https://github.com/dotnet/aspnetcore/blob/main/src...
3. использовать Areas, пишем middleware который при мобильном клиенте перекидывает нас на мобильную зону. но 2 раза писать все контроллеры, плюс можно разные версии сделать.