问题描述
|
我有一个DLL,其中包含一个用户控件,在Web窗体视图中,我可以通过使用轻松使用它
<%@ Register Assembly = \"...\" Namespace = \"...\" TagPrefix = \"...\" %>
但是,如何在Razor视图中做到这一点?
解决方法
您无法将服务器端控件添加到Razor视图。通常,在ASP.NET MVC应用程序中始终这样做是非常不好的做法。由于WebForms视图引擎的传统,您可能会违反此规则,但在Razor中,事情已经变得更加清晰。
话虽这么说,您仍然可以在Razor中进行一些色情活动,并包括一个WebForms部分,其中将包含用户控件(完全不建议使用,甚至不知道为什么我会提及它,但是无论如何):
@Html.Partial(\"_Foo\")
在“ѭ2”中,您可以包括服务器端控件:
<%@ Control Language=\"C#\" Inherits=\"System.Web.Mvc.ViewUserControl<dynamic>\" %>
<%@ Register Assembly=\"SomeAssembly\" Namespace=\"SomeNs\" TagName=\"foo\" %>
<foo:SomeControl runat=\"server\" ID=\"fooControl\" />
, 另外,不建议这样做,但是您可以在代码中呈现控件,例如在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\")
只需确保正确设置/引用名称空间即可。
警告
仅供参考,我很确定这里的页面生命周期有一些严格的限制...