Вы можете создать метод расширения HtmlHelper
для создания прилагаемого html, аналогично тому, как BeginForm()
генерирует теги <form></form>
.
using System;
using System.Web.Mvc;
namespace YourAssembly.Html
{
public class Dialog : IDisposable
{
private readonly ViewContext _viewContext;
private bool _disposed;
public Dialog(ViewContext viewContext)
{
if (viewContext == null)
{
throw new ArgumentNullException("viewContext");
}
_viewContext = viewContext;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
_disposed = true;
DialogExtensions.EndDialog(_viewContext);
}
}
public void EndDialog()
{
Dispose(true);
}
}
public static class DialogExtensions
{
public static Dialog BeginDialog(this HtmlHelper htmlHelper)
{
return DialogHelper(htmlHelper);
}
private static Dialog DialogHelper(this HtmlHelper htmlHelper)
{
TagBuilder div = new TagBuilder("div");
div.AddCssClass("modal fade bs-example-modal-lg");
div.MergeAttribute("tabindex", "-1");
div.MergeAttribute("role", "dialog");
htmlHelper.ViewContext.Writer.Write(div.ToString(TagRenderMode.StartTag));
div = new TagBuilder("div");
div.AddCssClass("modal-dialog modal-lg");
htmlHelper.ViewContext.Writer.Write(div.ToString(TagRenderMode.StartTag));
div = new TagBuilder("div");
div.AddCssClass("modal-content");
htmlHelper.ViewContext.Writer.Write(div.ToString(TagRenderMode.StartTag));
Dialog modal = new Dialog(htmlHelper.ViewContext);
return modal;
}
public static void EndDialog(this HtmlHelper htmlHelper)
{
EndDialog(htmlHelper.ViewContext);
}
internal static void EndDialog(ViewContext viewContext)
{
viewContext.Writer.Write("</div>");
viewContext.Writer.Write("</div>");
viewContext.Writer.Write("</div>");
}
}
}
и с точки зрения использования его в качестве
@using (Html.BeginDialog())
{
// add the content to be rendered in the dialog here
}
Примечание: В файле web.config
добавить пространство имен вашего узла, так что вы не должны включать @using
заявления в представлении.
<namespaces>
<add namespace="System.Web.Mvc" />
....
<add namespace="YourAssembly.Html" /> <!--add-->
</namespaces>
И тогда вы можете расширить это за счет создания дополнительных перегрузок, например, вы могли бы также иметь параметры для string title
и ButtonType buttons
(перечисление) для визуализации заголовка и кнопок колонтитула в диалоговом
Если вы При использовании MVC 6 вы можете создавать компоненты вида. Я становлюсь горячим, только думая о них. https://docs.asp.net/ru/latest/mvc/views/view-components.html – JDupont
@JDupont Я на самом деле наделал это. Увы, я использую MVC 5 (пока). Из того, что я видел в MVC 6 до сих пор, я не могу дождаться, когда спустится и потупится! – series0ne
вы можете использовать дочерние действия вместо частичных представлений, если хотите динамический контент – tmg