public void ViewBagAndViewDataStayInSync() { // Arrange Mock<IViewDataContainer> viewDataContainer = new Mock<IViewDataContainer>(); ViewDataDictionary viewDataDictionary = new ViewDataDictionary() { { "A", 1 } }; viewDataContainer.Setup(container => container.ViewData).Returns(viewDataDictionary); // Act AjaxHelper<object> ajaxHelper = new AjaxHelper<object>(new Mock<ViewContext>().Object, viewDataContainer.Object); ajaxHelper.ViewData["B"] = 2; ajaxHelper.ViewBag.C = 3; // Assert // Original ViewData should not be modified by redfined ViewData and ViewBag AjaxHelper nonGenericAjaxHelper = ajaxHelper; Assert.Single(nonGenericAjaxHelper.ViewData.Keys); Assert.Equal(1, nonGenericAjaxHelper.ViewData["A"]); Assert.Equal(1, nonGenericAjaxHelper.ViewBag.A); // Redefined ViewData and ViewBag should be in sync Assert.Equal(3, ajaxHelper.ViewData.Keys.Count); Assert.Equal(1, ajaxHelper.ViewData["A"]); Assert.Equal(2, ajaxHelper.ViewData["B"]); Assert.Equal(3, ajaxHelper.ViewData["C"]); Assert.Equal(1, ajaxHelper.ViewBag.A); Assert.Equal(2, ajaxHelper.ViewBag.B); Assert.Equal(3, ajaxHelper.ViewBag.C); }
public void ConstructorWithNullViewDataContainerThrows() { // Assert Assert.ThrowsArgumentNull( delegate { AjaxHelper ajaxHelper = new AjaxHelper(new Mock<ViewContext>().Object, null); }, "viewDataContainer"); }
public void ConstructorSetsProperties1() { // Arrange ViewContext viewContext = new Mock<ViewContext>().Object; IViewDataContainer vdc = new Mock<IViewDataContainer>().Object; // Act AjaxHelper ajaxHelper = new AjaxHelper(viewContext, vdc); // Assert Assert.Equal(viewContext, ajaxHelper.ViewContext); Assert.Equal(vdc, ajaxHelper.ViewDataContainer); Assert.Equal(RouteTable.Routes, ajaxHelper.RouteCollection); }
public void GenericHelperConstructorSetsProperties1() { // Arrange ViewContext viewContext = new Mock<ViewContext>().Object; ViewDataDictionary<Controller> vdd = new ViewDataDictionary<Controller>(new Mock<Controller>().Object); Mock<IViewDataContainer> vdc = new Mock<IViewDataContainer>(); vdc.Setup(v => v.ViewData).Returns(vdd); // Act AjaxHelper<Controller> ajaxHelper = new AjaxHelper<Controller>(viewContext, vdc.Object); // Assert Assert.Equal(viewContext, ajaxHelper.ViewContext); Assert.Equal(vdc.Object, ajaxHelper.ViewDataContainer); Assert.Equal(RouteTable.Routes, ajaxHelper.RouteCollection); Assert.Equal(vdd.Model, ajaxHelper.ViewData.Model); }
public void ViewBagProperty_ReflectsNewViewDataContainerInstance() { // Arrange ViewDataDictionary viewDataDictionary = new ViewDataDictionary() { { "A", 1 } }; Mock<IViewDataContainer> viewDataContainer = new Mock<IViewDataContainer>(); viewDataContainer.Setup(container => container.ViewData).Returns(viewDataDictionary); ViewDataDictionary otherViewDataDictionary = new ViewDataDictionary() { { "A", 2 } }; Mock<IViewDataContainer> otherViewDataContainer = new Mock<IViewDataContainer>(); otherViewDataContainer.Setup(container => container.ViewData).Returns(otherViewDataDictionary); AjaxHelper ajaxHelper = new AjaxHelper(new Mock<ViewContext>().Object, viewDataContainer.Object, new RouteCollection()); // Act ajaxHelper.ViewDataContainer = otherViewDataContainer.Object; // Assert Assert.Equal(2, ajaxHelper.ViewBag.A); }
protected virtual void CreateHelpers() { Html = new HtmlHelper(ViewContext, this); Url = new UrlHelper(ViewContext.RequestContext); Ajax = new AjaxHelper(ViewContext, this); }
public static MvcHtmlString AsiatekAjaxPager(this AjaxHelper ajaxHelper, IAsiatekPagedList pageList, AsiatekAjaxPagerOptions3 asiatekAjaxPagerOptions) { if (string.IsNullOrWhiteSpace(asiatekAjaxPagerOptions.SearchPageFieldName)) { asiatekAjaxPagerOptions.SearchPageFieldName = "SearchPage"; } //利用请求上下文对象创建url对象,用于分页超链接的创建 UrlHelper URL = new UrlHelper(ajaxHelper.ViewContext.RequestContext); #region 配置路由参数值 //反射查询参数对象,将系统类型的属性值添加到路由参数值中,属性名是路由参数的key //之所以这样做,是因为对于分页查询所需要的参数肯定都是简单类型 //比如视图采用模型StudentSetting,StudentSetting包含下拉列表Grades年级,以及对应的值GradeID //对于我们的查询而言,需要的只是GradeID,而不是Grades下拉列表属性 Type type = asiatekAjaxPagerOptions.SearchDatasObj.GetType(); var props = type.GetProperties().Where(p => p.PropertyType.ToString().StartsWith("System.") && !p.PropertyType.IsGenericType); RouteValueDictionary rvd = new RouteValueDictionary(); foreach (PropertyInfo p in props) { rvd.Add(p.Name, p.GetValue(asiatekAjaxPagerOptions.SearchDatasObj, null)); } if (!rvd.ContainsKey(asiatekAjaxPagerOptions.SearchPageFieldName)) { //允许自定义分页查询 当前页字段名 比如currentPage //相当于往请求参数中附加了currentPage=1 rvd.Add(asiatekAjaxPagerOptions.SearchPageFieldName, 1); } else { rvd[asiatekAjaxPagerOptions.SearchPageFieldName] = 1; } //查询操作所属区域名 rvd.Add("area", asiatekAjaxPagerOptions.AreaName); #endregion int pageIndex = pageList.CurrentPageIndex; //当前页索引 int pageCount = pageList.TotalPageCount; //总页数 string voidStr = "javascript:void(0)"; TagBuilder asiatekPagerDiv = new TagBuilder("div");//最外层DIV asiatekPagerDiv.GenerateId("asiatekPager"); TagBuilder asiatekPagerBackDiv = new TagBuilder("div");//第一页 asiatekPagerBackDiv.GenerateId("asiatekPagerBack"); TagBuilder backLink = new TagBuilder("a"); backLink.MergeAttribute("href", voidStr); backLink.SetInnerText("||<"); backLink.AddCssClass("asiatekPagerDefault"); if (pageCount != 1)//只有当总页数不为1时,才需要为返回第一页的html标签设置地址 { asiatekAjaxPagerOptions.Url = URL.Action(asiatekAjaxPagerOptions.ActionName, asiatekAjaxPagerOptions.ControllerName, rvd); backLink.MergeAttributes(asiatekAjaxPagerOptions.ToUnobtrusiveHtmlAttributes()); } asiatekPagerBackDiv.InnerHtml = backLink.ToString(); TagBuilder asiatekPagerFrontDiv = new TagBuilder("div");//末页 asiatekPagerFrontDiv.GenerateId("asiatekPagerFront"); TagBuilder frontLink = new TagBuilder("a"); frontLink.MergeAttribute("href", voidStr); frontLink.SetInnerText(">||"); frontLink.AddCssClass("asiatekPagerDefault"); if (pageCount != 1)//只有当总页数不为1时,才需要为末页的html标签设置地址 { rvd[asiatekAjaxPagerOptions.SearchPageFieldName] = pageCount; asiatekAjaxPagerOptions.Url = URL.Action(asiatekAjaxPagerOptions.ActionName, asiatekAjaxPagerOptions.ControllerName, rvd); frontLink.MergeAttributes(asiatekAjaxPagerOptions.ToUnobtrusiveHtmlAttributes()); } asiatekPagerFrontDiv.InnerHtml = frontLink.ToString(); //内容(页选择) TagBuilder asiatekPagerContentDiv = new TagBuilder("div");//页内容 asiatekPagerContentDiv.GenerateId("asiatekPagerContent"); for (int i = 1; i <= pageCount; i++) { TagBuilder numLink = new TagBuilder("a"); numLink.AddCssClass("asiatekPagerDefault"); numLink.MergeAttribute("href", voidStr); if (i == pageIndex)//当前页添加 css { numLink.AddCssClass("asiatekPagerSelected"); } if (pageCount != 1)//如果总页数超过1,那么才对 页链接创建非注入式脚本,否则不添加 { rvd[asiatekAjaxPagerOptions.SearchPageFieldName] = i; asiatekAjaxPagerOptions.Url = URL.Action(asiatekAjaxPagerOptions.ActionName, asiatekAjaxPagerOptions.ControllerName, rvd); numLink.MergeAttributes(asiatekAjaxPagerOptions.ToUnobtrusiveHtmlAttributes()); } numLink.SetInnerText(i.ToString()); asiatekPagerContentDiv.InnerHtml += numLink.ToString(); } int contentWidth = 250; //页数内容容器默认宽度250px int pagerWidth = 320; //整个分页导航总宽度默认320px if (pageCount < 10) //最多同时显示10页,当少于10页时,动态计算整体宽度,每个页链接占用25px,第一页与末页链接各占用35px { contentWidth = pageCount * 25; pagerWidth = 70 + contentWidth; } //设置容器宽度 asiatekPagerContentDiv.MergeAttribute("style", "width:" + contentWidth + "px;"); asiatekPagerDiv.MergeAttribute("style", "width:" + pagerWidth + "px;"); //合并全部HTML asiatekPagerDiv.InnerHtml = asiatekPagerBackDiv.ToString() + asiatekPagerContentDiv.ToString() + asiatekPagerFrontDiv.ToString(); return(MvcHtmlString.Create(asiatekPagerDiv.ToString())); }
public static MvcHtmlString Pager(this AjaxHelper ajax, IPagedList pagedList, PagerOptions pagerOptions, AjaxOptions ajaxOptions) { return(pagedList == null?Pager(ajax, pagerOptions, null) : Pager(ajax, pagedList.TotalItemCount, pagedList.PageSize, pagedList.CurrentPageIndex, null, null, null, pagerOptions, null, ajaxOptions, null)); }
public static RouteValueDictionary AppendContext(AjaxHelper ajaxHelper, RouteValueDictionary routeValues) { routeValues.Add("context", ajaxHelper.ViewData["context"].ToJson()); return(routeValues); }
internal PagerBuilder(HtmlHelper html, AjaxHelper ajax, string actionName, string controllerName, int totalPageCount, int pageIndex, PagerOptions pagerOptions, string routeName, RouteValueDictionary routeValues, AjaxOptions ajaxOptions, IDictionary <string, object> htmlAttributes) { _msAjaxPaging = (ajax != null); if (String.IsNullOrEmpty(actionName)) { if (ajax != null) { actionName = (string)ajax.ViewContext.RouteData.Values["action"]; } else { actionName = (string)html.ViewContext.RouteData.Values["action"]; } } if (String.IsNullOrEmpty(controllerName)) { if (ajax != null) { controllerName = (string)ajax.ViewContext.RouteData.Values["controller"]; } else { controllerName = (string)html.ViewContext.RouteData.Values["controller"]; } } if (pagerOptions == null) { pagerOptions = new PagerOptions(); } _html = html; _ajax = ajax; _actionName = actionName; _controllerName = controllerName; if (pagerOptions.MaxPageIndex == 0 || pagerOptions.MaxPageIndex > totalPageCount) { _totalPageCount = totalPageCount; } else { _totalPageCount = pagerOptions.MaxPageIndex; } _pageIndex = pageIndex; _pagerOptions = pagerOptions; _routeName = routeName; _routeValues = routeValues; _ajaxOptions = ajaxOptions; _htmlAttributes = htmlAttributes; // start page index _startPageIndex = pageIndex - (pagerOptions.NumericPagerItemCount / 2); if (_startPageIndex + pagerOptions.NumericPagerItemCount > _totalPageCount) { _startPageIndex = _totalPageCount + 1 - pagerOptions.NumericPagerItemCount; } if (_startPageIndex < 1) { _startPageIndex = 1; } // end page index _endPageIndex = _startPageIndex + _pagerOptions.NumericPagerItemCount - 1; if (_endPageIndex > _totalPageCount) { _endPageIndex = _totalPageCount; } }
public async Task <AjaxModel <ProfileModel> > ProfileGet() { return(await AjaxHelper.GetAsync(m => this.domain.ProfileGet())); }
public async Task <AjaxModel <List <ListItem <int, string> > > > DriversListGet() { return(await AjaxHelper.GetAsync(m => this.domain.DriversListGet())); }
public async Task <AjaxModel <NTModel> > ModelUpdate([FromBody] VehicleManufacturerModelModel model) { return(await AjaxHelper.SaveAsync(m => this.domain.ModelSave(model), FleetMessages.VehicleModelSaveSuccess)); }
public async Task <AjaxModel <ManufacturerDetailsModel> > ManufacturerDetailsGet(int manufacturerId) { return(await AjaxHelper.GetDashboardAsync(m => this.domain.ManufacturerDetailsGet(manufacturerId), this.dashboardDomain, this.widgetDomain)); }
public async Task <AjaxModel <NTModel> > ManufacturerDelete([FromBody] int manufacturerId) { return(await AjaxHelper.SaveAsync(m => this.domain.VehicleManufacturerDelete(manufacturerId), FleetMessages.VehicleManufacturerDeleteSuccess)); }
public async Task <AjaxModel <VehicleManufacturerModel> > ManufacturerGet(int manufacturerId) { return(await AjaxHelper.GetAsync(m => this.domain.VehicleManufacturerGet(manufacturerId))); }
public static IHtmlString IconActionLink(this AjaxHelper helper, string iconClass, string linkText, string actionName, string controlerName, object routeValues, AjaxOptions ajaxOptions, object linkHtmlAttribute) { return(IconActionLinkBase(helper, iconClass, linkText, actionName, controlerName, routeValues, ajaxOptions, linkHtmlAttribute)); }
public static IHtmlString ImageActionLink(this AjaxHelper helper, string imageUrl, string altText, string actionName, string controlerName, object routeValues, AjaxOptions ajaxOptions, object imageHtmlAttribute, object linkHtmlAttribute) { return(ImageActionLinkBase(helper, imageUrl, altText, actionName, controlerName, routeValues, ajaxOptions, imageHtmlAttribute, linkHtmlAttribute)); }
public RubyAjaxHelper(ViewContext viewContext, IViewDataContainer viewDataContainer) : base(viewContext, viewDataContainer) { _helper = new AjaxHelper(viewContext, viewDataContainer); }
public async Task <AjaxModel <List <VehicleDriverAssignmentModel> > > VehicleDriverGetList(int vehicleId) { return(await AjaxHelper.GetAsync(m => this.domain.VehicleDriverGetList(vehicleId))); }
public async Task <AjaxModel <NTModel> > ChangePassword([FromBody] ChangePasswordModel model) { return(await AjaxHelper.SaveAsync(m => this.domain.ChangePassword(model), SecurityMessages.ChangePasswordSuccess)); }
public async Task <AjaxModel <NTModel> > VehicleDriverAdd([FromBody] VehicleDriverAssignmentModel model) { return(await AjaxHelper.SaveAsync(m => this.domain.VehicleDriverSave(model), FleetMessages.VehicleDriverSaveSuccess)); }
public static MvcHtmlString ContextedActionLink(this AjaxHelper ajaxHelper, string linkText, string actionName, AjaxOptions ajaxOptions) { var routeValuesWithContext = AppendContext(ajaxHelper, new RouteValueDictionary()); return(ajaxHelper.ActionLink(linkText, actionName, routeValuesWithContext, ajaxOptions)); }
public async Task <AjaxModel <List <FuelModel> > > FuelGetList(int vehicleId) { return(await AjaxHelper.GetAsync(m => this.domain.FuelGetList(vehicleId))); }
private static MvcHtmlString Pager(AjaxHelper ajax, PagerOptions pagerOptions, IDictionary <string, object> htmlAttributes) { return(new PagerBuilder(null, ajax, pagerOptions, htmlAttributes).RenderPager()); }
public async Task <AjaxModel <NTModel> > FuelUpdate([FromBody] FuelModel model) { return(await AjaxHelper.SaveAsync(m => this.domain.FuelSave(model), FleetMessages.FuelSaveSuccess)); }
public static MvcForm BeginJqueryForm(this AjaxHelper ajaxHelper, string formId, ActionResult actionResult, string callback, string cssClassNames) { var callInfo = actionResult.AsMVCResult(); return(BeginJqueryForm(ajaxHelper, callInfo.Action, callInfo.Controller, formId, callback, callInfo.RouteValueDictionary, cssClassNames, null /* htmlAttributes */)); }
public async Task <AjaxModel <NTModel> > VehicleFuelReset([FromBody] int vehicleId) { return(await AjaxHelper.SaveAsync(m => this.domain.VehicleFuelReset(vehicleId), FleetMessages.FuelResetSuccess)); }
public static MvcHtmlString AsiatekAjaxPager(this AjaxHelper ajaxHelper, IAsiatekPagedList pageList, Func <int, AjaxOptions> pageAjaxOptions) { int pageIndex = pageList.CurrentPageIndex; //当前页索引 int pageCount = pageList.TotalPageCount; //总页数 string voidStr = "javascript:void(0)"; TagBuilder asiatekPagerDiv = new TagBuilder("div");//最外层DIV asiatekPagerDiv.GenerateId("asiatekPager"); TagBuilder asiatekPagerBackDiv = new TagBuilder("div");//第一页 asiatekPagerBackDiv.GenerateId("asiatekPagerBack"); TagBuilder backLink = new TagBuilder("a"); backLink.MergeAttribute("href", voidStr); backLink.SetInnerText("||<"); backLink.AddCssClass("asiatekPagerDefault"); if (pageCount != 1) { backLink.MergeAttributes(pageAjaxOptions(1).ToUnobtrusiveHtmlAttributes()); } asiatekPagerBackDiv.InnerHtml = backLink.ToString(); TagBuilder asiatekPagerFrontDiv = new TagBuilder("div");//末页 asiatekPagerFrontDiv.GenerateId("asiatekPagerFront"); TagBuilder frontLink = new TagBuilder("a"); frontLink.MergeAttribute("href", voidStr); frontLink.SetInnerText(">||"); frontLink.AddCssClass("asiatekPagerDefault"); if (pageCount != 1) { frontLink.MergeAttributes(pageAjaxOptions(pageCount).ToUnobtrusiveHtmlAttributes()); } asiatekPagerFrontDiv.InnerHtml = frontLink.ToString(); //内容(页选择) TagBuilder asiatekPagerContentDiv = new TagBuilder("div");//页内容 asiatekPagerContentDiv.GenerateId("asiatekPagerContent"); for (int i = 1; i <= pageCount; i++) { TagBuilder numLink = new TagBuilder("a"); numLink.AddCssClass("asiatekPagerDefault"); numLink.MergeAttribute("href", voidStr); if (i == pageIndex)//当前页添加 css { numLink.AddCssClass("asiatekPagerSelected"); } if (pageCount != 1)//如果总页数超过1,那么才对 页链接创建非注入式脚本,否则不添加 { numLink.MergeAttributes(pageAjaxOptions(i).ToUnobtrusiveHtmlAttributes()); } numLink.SetInnerText(i.ToString()); asiatekPagerContentDiv.InnerHtml += numLink.ToString(); } int contentWidth = 250; //页数内容容器默认宽度250px int pagerWidth = 320; //整个分页导航总宽度默认320px if (pageCount < 10) //最多同时显示10页,当少于10页时,动态计算整体宽度,每个页链接占用25px,第一页与末页链接各占用35px { contentWidth = pageCount * 25; pagerWidth = 70 + contentWidth; } //设置容器宽度 asiatekPagerContentDiv.MergeAttribute("style", "width:" + contentWidth + "px;"); asiatekPagerDiv.MergeAttribute("style", "width:" + pagerWidth + "px;"); //合并全部HTML asiatekPagerDiv.InnerHtml = asiatekPagerBackDiv.ToString() + asiatekPagerContentDiv.ToString() + asiatekPagerFrontDiv.ToString(); return(MvcHtmlString.Create(asiatekPagerDiv.ToString())); }
public async Task <AjaxModel <NTModel> > VehicleTypeUpdate([FromBody] VehicleTypeModel model) { return(await AjaxHelper.SaveAsync(m => this.domain.VehicleTypeSave(model), FleetMessages.VehicleTypeSaveSuccess)); }
public void ViewBagProperty_ReflectsViewData() { // Arrange ViewDataDictionary viewDataDictionary = new ViewDataDictionary() { { "A", 1 } }; Mock<IViewDataContainer> viewDataContainer = new Mock<IViewDataContainer>(); viewDataContainer.Setup(container => container.ViewData).Returns(viewDataDictionary); // Act AjaxHelper ajaxHelper = new AjaxHelper(new Mock<ViewContext>().Object, viewDataContainer.Object); // Assert Assert.Equal(1, ajaxHelper.ViewBag.A); }
public void ViewBag_PropagatesChangesToViewData() { // Arrange ViewDataDictionary viewDataDictionary = new ViewDataDictionary() { { "A", 1 } }; Mock<IViewDataContainer> viewDataContainer = new Mock<IViewDataContainer>(); viewDataContainer.Setup(container => container.ViewData).Returns(viewDataDictionary); AjaxHelper ajaxHelper = new AjaxHelper(new Mock<ViewContext>().Object, viewDataContainer.Object, new RouteCollection()); // Act ajaxHelper.ViewBag.A = "foo"; ajaxHelper.ViewBag.B = 2; // Assert Assert.Equal("foo", ajaxHelper.ViewData["A"]); Assert.Equal(2, ajaxHelper.ViewData["B"]); }
public async Task <AjaxModel <NTModel> > VehicleTypeDelete([FromBody] int vehicleTypeId) { return(await AjaxHelper.SaveAsync(m => this.domain.VehicleTypeDelete(vehicleTypeId), FleetMessages.VehicleTypeDeleteSuccess)); }
public MvcForm BeginForm(AjaxHelper ajaxHelper) { return(ajaxHelper.BeginForm(ActionName, ControllerName, RouteValues, AjaxOptions, HtmlAttributes)); }
public async Task <AjaxModel <List <VehicleListModel> > > VehicleList() { return(await AjaxHelper.GetDashboardAsync(m => this.domain.VehicleList(), this.dashboardDomain, this.widgetDomain)); }
public async Task <AjaxModel <VehicleDetailsModel> > VehicleServiceUpdate([FromBody] VehicleServiceModel model) { return(await AjaxHelper.SaveGetAsync(m => this.domain.VehicleServiceSave(model), FleetMessages.VehicleServiceSaveSuccess)); }
private static string GenerateLink(AjaxHelper ajaxHelper, string linkText, string targetUrl, AjaxOptions ajaxOptions, IDictionary<string, object> htmlAttributes) { TagBuilder tag = new TagBuilder("a") { InnerHtml = HttpUtility.HtmlEncode(linkText) }; tag.MergeAttributes(htmlAttributes); tag.MergeAttribute("href", targetUrl); if (ajaxHelper.ViewContext.UnobtrusiveJavaScriptEnabled) { tag.MergeAttributes(ajaxOptions.ToUnobtrusiveHtmlAttributes()); } else { tag.MergeAttribute("onclick", GenerateAjaxScript(ajaxOptions, LinkOnClickFormat)); } return tag.ToString(TagRenderMode.Normal); }
public async Task <AjaxModel <List <VehicleServiceModel> > > VehicleServiceReportGet(int vehicleServiceId, DateTime startDate, DateTime endDate) { return(await AjaxHelper.GetAsync(m => this.domain.VehicleServiceReportGet(vehicleServiceId, startDate, endDate))); }
public RubyAjaxHelper(ViewContext viewContext, IViewDataContainer viewDataContainer, RouteCollection routeCollection) : base(viewContext, viewDataContainer, routeCollection) { _helper = new AjaxHelper(viewContext, viewDataContainer, routeCollection); }
public async Task <AjaxModel <VehicleModel> > VehicleGet(int vehicleId) { return(await AjaxHelper.GetAsync(m => this.domain.VehicleGet(vehicleId))); }
/// <summary> /// Instantiates and initializes the Ajax, Html, and Url properties. /// </summary> public virtual void InitHelpers(ViewContext context) { Precondition.Require(context, () => Mvc.Error.ArgumentNull("context")); SetContentType(context.Context); _parameters = context.Context.Request.Parameters; _html = new HtmlHelper(context); _url = new UrlHelper(context); _ajax = new AjaxHelper(context); _validation = new ValidationHelper(context); }
public async Task <AjaxModel <NTModel> > Logout() { return(await AjaxHelper.SaveAsync(m => this.domain.Logout(), SecurityMessages.LogoutSuccess)); }