Skip to content

Instantly share code, notes, and snippets.

@tstivers1990
Created January 25, 2020 04:15
Show Gist options
  • Save tstivers1990/b0dc2e9e30ccff89c413c31cb494f566 to your computer and use it in GitHub Desktop.
Save tstivers1990/b0dc2e9e30ccff89c413c31cb494f566 to your computer and use it in GitHub Desktop.
public abstract class PageModelBase : PageModel
{
public virtual RedirectToPageResult RedirectToPage<TPageModel>()
where TPageModel : PageModel
{
return RedirectToPage<TPageModel>((object) null);
}
public virtual RedirectToPageResult RedirectToPage<TPageModel>(
string pageHandler)
where TPageModel : PageModel
{
return RedirectToPage<TPageModel>(pageHandler, (object) null);
}
public virtual RedirectToPageResult RedirectToPage<TPageModel>(
string pageHandler,
object routeValues)
where TPageModel : PageModel
{
return RedirectToPage<TPageModel>(pageHandler, routeValues, null);
}
public virtual RedirectToPageResult RedirectToPage<TPageModel>(
object routeValues)
where TPageModel : PageModel
{
return RedirectToPage<TPageModel>(null, routeValues, null);
}
public virtual RedirectToPageResult RedirectToPage<TPageModel>(
string pageHandler,
string fragment)
where TPageModel : PageModel
{
return RedirectToPage<TPageModel>(pageHandler, null, fragment);
}
public virtual RedirectToPageResult RedirectToPage<TPageModel>(
string pageHandler,
object routeValues,
string fragment)
where TPageModel : PageModel
{
return new RedirectToPageResult(PageNameHelper.GetPageName<TPageModel>(), pageHandler,
routeValues, fragment);
}
public virtual RedirectToPageResult RedirectToPagePermanent<TPageModel>()
where TPageModel : PageModel
{
return RedirectToPagePermanent<TPageModel>(null);
}
public virtual RedirectToPageResult RedirectToPagePermanent<TPageModel>(
object routeValues)
where TPageModel : PageModel
{
return RedirectToPagePermanent<TPageModel>(null, routeValues, null);
}
public virtual RedirectToPageResult RedirectToPagePermanent<TPageModel>(
string pageHandler)
where TPageModel : PageModel
{
return RedirectToPagePermanent<TPageModel>(pageHandler, (object) null);
}
public virtual RedirectToPageResult RedirectToPagePermanent<TPageModel>(
string pageHandler,
object routeValues)
where TPageModel : PageModel
{
return RedirectToPagePermanent<TPageModel>(pageHandler, routeValues, null);
}
public virtual RedirectToPageResult RedirectToPagePermanent<TPageModel>(
string pageHandler,
string fragment)
where TPageModel : PageModel
{
return RedirectToPagePermanent<TPageModel>(pageHandler, null, fragment);
}
public virtual RedirectToPageResult RedirectToPagePermanent<TPageModel>(
object routeValues,
string fragment)
where TPageModel : PageModel
{
return RedirectToPagePermanent<TPageModel>(null, routeValues, fragment);
}
public virtual RedirectToPageResult RedirectToPagePermanent<TPageModel>(
string pageHandler,
object routeValues,
string fragment)
where TPageModel : PageModel
{
return new RedirectToPageResult(PageNameHelper.GetPageName<TPageModel>(), pageHandler,
routeValues, true, fragment);
}
public virtual RedirectToPageResult RedirectToPagePreserveMethod<TPageModel>(
string pageHandler = null,
object routeValues = null,
string fragment = null)
where TPageModel : PageModel
{
return new RedirectToPageResult(PageNameHelper.GetPageName<TPageModel>(), pageHandler,
routeValues, false, true, fragment);
}
public virtual RedirectToPageResult RedirectToPagePermanentPreserveMethod<TPageModel>(
string pageHandler = null,
object routeValues = null,
string fragment = null)
where TPageModel : PageModel
{
return new RedirectToPageResult(PageNameHelper.GetPageName<TPageModel>(), pageHandler,
routeValues, true, true, fragment);
}
}
public static class PageNameHelper
{
private const string RootNamespace = "ProjectName.Web.Pages";
public static string GetPageName<TPageModel>() where TPageModel : PageModel
{
var pageModelType = typeof(TPageModel);
var pageName = GetPageName(pageModelType);
var pagePath = GetPagePath(pageModelType);
return pagePath.Length > 0
? $"{pagePath}/{pageName}"
: $"/{pageName}";
}
private static string GetPageName(Type pageModelType)
{
if (!pageModelType.Name.EndsWith("Model"))
throw new InvalidOperationException("Invalid PageModel name.");
return pageModelType.Name.Substring(0, pageModelType.Name.Length - "Model".Length);
}
private static string GetPagePath(Type pageModelType)
{
if (pageModelType.Namespace == null || !pageModelType.Namespace.StartsWith(RootNamespace))
throw new InvalidOperationException("Invalid PageModel namespace.");
return pageModelType.Namespace.Substring(RootNamespace.Length).Replace(".", "/");
}
}
public static class UrlHelperExtensions
{
public static string PageLink<TPageModel>(this IUrlHelper urlHelper,
string pageHandler = null,
object values = null,
string protocol = null,
string host = null,
string fragment = null)
where TPageModel : PageModel
=> urlHelper.PageLink(PageNameHelper.GetPageName<TPageModel>(), pageHandler, values, protocol, host, fragment);
public static string Page<TPageModel>(this IUrlHelper urlHelper)
where TPageModel : PageModel
=> urlHelper.Page(PageNameHelper.GetPageName<TPageModel>());
public static string Page<TPageModel>(this IUrlHelper urlHelper, object values)
where TPageModel : PageModel
=> urlHelper.Page(PageNameHelper.GetPageName<TPageModel>(), values);
public static string Page<TPageModel>(this IUrlHelper urlHelper, string pageHandler)
where TPageModel : PageModel
=> urlHelper.Page(PageNameHelper.GetPageName<TPageModel>(), pageHandler);
public static string Page<TPageModel>(this IUrlHelper urlHelper, string pageHandler, object values)
where TPageModel : PageModel
=> urlHelper.Page(PageNameHelper.GetPageName<TPageModel>(), pageHandler, values);
public static string Page<TPageModel>(this IUrlHelper urlHelper, string pageHandler, object values,
string protocol)
where TPageModel : PageModel
=> urlHelper.Page(PageNameHelper.GetPageName<TPageModel>(), pageHandler, values, protocol);
public static string Page<TPageModel>(this IUrlHelper urlHelper, string pageHandler, object values,
string protocol, string host)
where TPageModel : PageModel
=> urlHelper.Page(PageNameHelper.GetPageName<TPageModel>(), pageHandler, values, protocol, host);
public static string Page<TPageModel>(this IUrlHelper urlHelper, string pageHandler, object values,
string protocol, string host, string fragment)
where TPageModel : PageModel
=> urlHelper.Page(PageNameHelper.GetPageName<TPageModel>(), pageHandler, values, protocol, host, fragment);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment