using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Mvc; using System.Web.Mvc.Ajax; using System.Web.Mvc.Html; using System.Web.Routing; namespace Pcb.Common.Extension { public static class AjaxFormExtensions { private const string RETURN_URL_PARA = "ReturnUrl"; public static MvcForm BeginReturnUrlForm(this AjaxHelper ajaxHelper, AjaxOptions ajaxOptions) { var actionName = ajaxHelper.ViewContext.RouteData.Values["action"].ToString(); return ajaxHelper.BeginReturnUrlForm(actionName, ajaxOptions); } public static MvcForm BeginReturnUrlForm(this AjaxHelper ajaxHelper, string actionName, AjaxOptions ajaxOptions) { return ajaxHelper.BeginReturnUrlForm(actionName, new RouteValueDictionary(), ajaxOptions); } public static MvcForm BeginReturnUrlForm(this AjaxHelper ajaxHelper, string actionName, object routeValues, AjaxOptions ajaxOptions) { return ajaxHelper.BeginReturnUrlForm(actionName, new RouteValueDictionary(routeValues), ajaxOptions); } public static MvcForm BeginReturnUrlForm(this AjaxHelper ajaxHelper, string actionName, RouteValueDictionary routeValues, AjaxOptions ajaxOptions) { routeValues.AddReturnUrl(ajaxHelper); return ajaxHelper.BeginForm(actionName, routeValues, ajaxOptions); } public static MvcForm BeginReturnUrlForm(this AjaxHelper ajaxHelper, string actionName, string controllerName, AjaxOptions ajaxOptions) { return ajaxHelper.BeginReturnUrlForm(actionName, controllerName, new RouteValueDictionary(), ajaxOptions); } public static MvcForm BeginReturnUrlForm(this AjaxHelper ajaxHelper, string actionName, object routeValues, AjaxOptions ajaxOptions, object htmlAttributes) { return ajaxHelper.BeginReturnUrlForm(actionName, new RouteValueDictionary(routeValues), ajaxOptions, CreateHtmlAttributeDictionary(htmlAttributes)); } public static MvcForm BeginReturnUrlForm(this AjaxHelper ajaxHelper, string actionName, RouteValueDictionary routeValues, AjaxOptions ajaxOptions, IDictionary htmlAttributes) { routeValues.AddReturnUrl(ajaxHelper); return ajaxHelper.BeginForm(actionName, routeValues, ajaxOptions, htmlAttributes); } public static MvcForm BeginReturnUrlForm(this AjaxHelper ajaxHelper, string actionName, string controllerName, object routeValues, AjaxOptions ajaxOptions) { return ajaxHelper.BeginReturnUrlForm(actionName, controllerName, new RouteValueDictionary(routeValues), ajaxOptions); } public static MvcForm BeginReturnUrlForm(this AjaxHelper ajaxHelper, string actionName, string controllerName, RouteValueDictionary routeValues, AjaxOptions ajaxOptions) { return ajaxHelper.BeginReturnUrlForm(actionName, controllerName, routeValues, ajaxOptions, new RouteValueDictionary()); } public static MvcForm BeginReturnUrlForm(this AjaxHelper ajaxHelper, string actionName, string controllerName, object routeValues, AjaxOptions ajaxOptions, object htmlAttributes) { return ajaxHelper.BeginReturnUrlForm(actionName, controllerName, new RouteValueDictionary(routeValues), ajaxOptions, CreateHtmlAttributeDictionary(htmlAttributes)); } public static MvcForm BeginReturnUrlForm(this AjaxHelper ajaxHelper, string actionName, string controllerName, RouteValueDictionary routeValues, AjaxOptions ajaxOptions, IDictionary htmlAttributes) { routeValues.AddReturnUrl(ajaxHelper); return ajaxHelper.BeginForm(actionName, controllerName, routeValues, ajaxOptions, htmlAttributes); } private static string ReturnUrl(this AjaxHelper ajaxHelper) { return ajaxHelper.ViewBag.ReturnUrl; } private static void AddReturnUrl(this RouteValueDictionary dic, AjaxHelper ajaxHelper) { if (!dic.ContainsKey(RETURN_URL_PARA)) { var returnUrl = ajaxHelper.ReturnUrl(); if (!string.IsNullOrWhiteSpace(returnUrl)) { dic.Add(RETURN_URL_PARA, returnUrl); } } } private static RouteValueDictionary CreateRouteValueDictionayWithReturnUrl(AjaxHelper ajaxHelper, object routeValues = null) { var routeValuesDic = new RouteValueDictionary(routeValues); routeValuesDic.AddReturnUrl(ajaxHelper); return routeValuesDic; } private static RouteValueDictionary CreateHtmlAttributeDictionary(object htmlAttributes) { return HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes); } } }