我有一个使用 TagPrefix / TagName 注册在 .NET MVC 页面上呈现的用户控件。调用它的属性指定在服务器上运行,并指定用户控件的 .ascx 代码用作变量的几个变量值
例如
<%@ Register TagPrefix="UC" TagName="MyUserControl" Src="MyUserControlPathAndName.ascx" %>
. . .
<UC:MyUserControl runat="server" ID="MyID" ID2="MyID2" />
然后在用户控件的 .ascx 中,有 HTML、脚本和使用 ID 和 ID2 变量的代码。
我想要做的是不将此标记编码到 .ascx 文件中,而是保持我的观点非常简单 - 只需调用 Html Helper,并在 HtmlHelper 代码中处理此用户控件的使用,但我'我有点不知所措 - 有没有办法在 HTML 助手内部呈现标签,然后当 HTML 助手生成的字符串被呈现时,这些标签仍然会在服务器端得到处理?或者,如果没有,那么有没有办法在运行我的 HTML Helper 时从代码中渲染用户控件(包括将它需要的 ID 和 ID2 变量传递给它)?
这里和这里建议的调用 ViewPage.RenderControl 或 Page.RenderControl 的方法确实有效,但我不知道如何传入 ID 和 ID2 变量。我试过这个
viewPage.ViewData = new ViewDataDictionary();
viewPage.ViewData.Add("ID", "MyID");
viewPage.ViewData.Add("ID2", "MyID2");
但是,UserControl 的 .ascx 中使用代码隐藏文件中的 ID2 属性的代码没有看到该值(可能是因为它不应该是 ViewData 中的值,而是在 UserControl 类本身上设置的值)。试图弄清楚如何在 UserControl 上设置该属性。
我想我可能在这里找到了答案。还在验证。如果有效,将其作为答案发布。