/// <summary> /// Asynchronously executes the tag helper with the given context and output /// </summary> /// <param name="context">Contains information associated with the current HTML tag</param> /// <param name="output">A stateful HTML element used to generate an HTML tag</param> public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (output == null) { throw new ArgumentNullException(nameof(output)); } //contextualize IHtmlHelper var viewContextAware = _htmlHelper as IViewContextAware; viewContextAware?.Contextualize(ViewContext); if (string.IsNullOrEmpty(Action)) { Action = _htmlHelper.ViewContext.RouteData.Values["action"].ToString(); } var modalId = await new HtmlString(ButtonId + "-action-confirmation").RenderHtmlContentAsync(); var actionConfirmationModel = new ActionConfirmationModel() { ControllerName = _htmlHelper.ViewContext.RouteData.Values["controller"].ToString(), ActionName = Action, WindowId = modalId, AdditonalConfirmText = ConfirmText }; //tag details output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; output.Attributes.Add("id", modalId); output.Attributes.Add("class", "modal fade"); output.Attributes.Add("tabindex", "-1"); output.Attributes.Add("role", "dialog"); output.Attributes.Add("aria-labelledby", $"{modalId}-title"); var partialView = await _htmlHelper.PartialAsync("Confirm", actionConfirmationModel); output.Content.SetHtmlContent(partialView); //modal script var script = new TagBuilder("script"); script.InnerHtml.AppendHtml( "$(document).ready(function () {" + $"$('#{ButtonId}').attr(\"data-toggle\", \"modal\").attr(\"data-target\", \"#{modalId}\");" + $"$('#{modalId}-submit-button').attr(\"name\", $(\"#{ButtonId}\").attr(\"name\"));" + $"$(\"#{ButtonId}\").attr(\"name\", \"\");" + $"if($(\"#{ButtonId}\").attr(\"type\") == \"submit\")$(\"#{ButtonId}\").attr(\"type\", \"button\");" + "});"); var scriptTag = await script.RenderHtmlContentAsync(); output.PostContent.SetHtmlContent(scriptTag); }
public static MvcHtmlString ActionConfirmation(this HtmlHelper helper, string buttonId, string actionName = "") { if (string.IsNullOrEmpty(actionName)) { actionName = helper.ViewContext.RouteData.GetRequiredString("action"); } var modalId = MvcHtmlString.Create(buttonId + "-action-confirmation").ToHtmlString(); var actionConfirmationModel = new ActionConfirmationModel() { ControllerName = helper.ViewContext.RouteData.GetRequiredString("controller"), ActionName = actionName, WindowId = modalId }; var window = new StringBuilder(); window.AppendLine(string.Format("<div id='{0}' class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"{0}-title\">", modalId)); window.AppendLine(helper.Partial("Confirm", actionConfirmationModel).ToHtmlString()); window.AppendLine("</div>"); window.AppendLine("<script>"); window.AppendLine("$(document).ready(function() {"); window.AppendLine(string.Format("$('#{0}').attr(\"data-toggle\", \"modal\").attr(\"data-target\", \"#{1}\");", buttonId, modalId)); window.AppendLine(string.Format("$('#{0}-submit-button').attr(\"name\", $(\"#{1}\").attr(\"name\"));", modalId, buttonId)); window.AppendLine(string.Format("$(\"#{0}\").attr(\"name\", \"\")", buttonId)); window.AppendLine(string.Format("if($(\"#{0}\").attr(\"type\") == \"submit\")$(\"#{0}\").attr(\"type\", \"button\")", buttonId)); window.AppendLine("});"); window.AppendLine("</script>"); return(MvcHtmlString.Create(window.ToString())); }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (output == null) { throw new ArgumentNullException(nameof(output)); } IViewContextAware viewContextAware = _htmlHelper as IViewContextAware; viewContextAware?.Contextualize(ViewContext); string modalId = new HtmlString(ButtonId + "-action-confirmation").ToHtmlString(); ActionConfirmationModel actionConfirmationModel = new ActionConfirmationModel() { ModalId = modalId, ConfirmText = ConfirmText }; output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; output.Attributes.Add("id", modalId); output.Attributes.Add("class", $"modal {ModalUiClass} fade"); output.Attributes.Add("tabindex", "-1"); output.Attributes.Add("role", "dialog"); output.Attributes.Add("aria-labelledby", $"{modalId}-title"); output.Content.SetHtmlContent(await _htmlHelper.PartialAsync("Confirm", actionConfirmationModel)); TagBuilder script = new TagBuilder("script"); script.InnerHtml.AppendHtml("$(document).ready(function () {" + $"$('#{ButtonId}').attr(\"data-toggle\", \"modal\").attr(\"data-target\", \"#{modalId}\");" + $"$('#{modalId}-submit-button').attr(\"name\", $(\"#{ButtonId}\").attr(\"name\"));" + $"$(\"#{ButtonId}\").attr(\"name\", \"\");" + $"if($(\"#{ButtonId}\").attr(\"type\") == \"submit\")$(\"#{ButtonId}\").attr(\"type\", \"button\");" + "});"); output.PostContent.SetHtmlContent(script.ToHtmlString()); }