MVC 3: добавление usercontrol в режим Razor

У меня есть DLL, содержащая пользовательский элемент управления внутри, в представлении Web Form я могу легко использовать его с помощью

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

Но как это сделать в Razor?

Ответ 1

Вы не можете добавлять элементы управления на стороне сервера в представления 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

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

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")

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

Caveat

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