MVC 3: добавить usercontrol в представление Razor - PullRequest
11 голосов
/ 11 июня 2011

У меня есть DLL, которая содержит пользовательский элемент управления внутри, в представлении веб-формы я могу легко использовать ее, используя

<%@ Register Assembly = "..." Namespace = "..." TagPrefix = "..." %>

Но как это сделать в представлении Razor?

Ответы [ 2 ]

26 голосов
/ 11 июня 2011

Нельзя добавить серверные элементы управления в представления Razor. В общем, это очень плохая практика - делать это в любом случае в приложении ASP.NET MVC. Из-за наследия движка представления WebForms вы могли нарушить это правило, но в Razor все стало более понятным.

Это сказанное еще можно было сделать некоторые порнографию в бритве и включают WebForms частичный, который будет содержать пользовательский элемент управления (полностью не рекомендуется, даже не знаю, почему я упоминая его, но в любом случае):

@Html.Partial("_Foo")

, где в _Foo.ascx можно включить элементы управления на стороне сервера:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%@ Register Assembly="SomeAssembly" Namespace="SomeNs" TagName="foo" %>

<foo:SomeControl runat="server" ID="fooControl" />
2 голосов
/ 12 августа 2013

Кроме того, не рекомендуется, но вы можете отобразить элемент управления в коде, как в HTML Helper:

public static string GenerateHtmlFromYourControl(this HtmlHelper helper, string id)
{
    var yourControl = new YourControl();

    yourControl.ID = id;

    var htmlWriter = new HtmlTextWriter(new StringWriter());

    yourControl.RenderControl(htmlWriter);

    return htmlWriter.InnerWriter.ToString();
}

и затем вы можете ссылаться на него с вашей точки зрения:

Html.GenerateHtmlFromYourControl("YourControlId")

Просто убедитесь, что вы правильно настроили / ссылаетесь на свои пространства имен, чтобы сделать это.

Протест

К вашему сведению, я почти уверен, что существуют некоторые серьезные ограничения относительно жизненного цикла страницы здесь ...

...