У меня есть DLL, содержащая пользовательский элемент управления внутри, в представлении Web Form я могу легко использовать его с помощью
<%@ Register Assembly = "..." Namespace = "..." TagPrefix = "..." %>
Но как это сделать в Razor?
У меня есть DLL, содержащая пользовательский элемент управления внутри, в представлении Web Form я могу легко использовать его с помощью
<%@ Register Assembly = "..." Namespace = "..." TagPrefix = "..." %>
Но как это сделать в Razor?
Вы не можете добавлять элементы управления на стороне сервера в представления 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" />
Кроме того, не рекомендуется, но вы можете визуализировать элемент управления в коде, например, в 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")
Просто убедитесь, что вы правильно настроили/ссылаетесь на свои пространства имен.
FYI, я уверен, что существуют некоторые серьезные ограничения в отношении жизненного цикла страницы здесь...