Asp.Net WebForms – 如何将ViewData作为param传递给用户控件
我是ASP.net的新手,并inheritance了一个应用程序进行更新。 虽然遇到了一些我需要帮助理解的情况,但我的情况还算不错。
我有一个用户控件uc:speciesgrid
,它接受一些参数: applicationId
和species
应该来自ViewData并作为参数传递,但我找不到有效的语法。 对它的硬编码调用(有效)是:
我尝试了<%, <%=, <%#
所有组合,并且无效。 所以类似于:
<uc:speciesgrid runat="server" ID="speciesgrid1" applicationId='' species="Dog"/>
错误都是一样的:
{"Cannot create an object of type 'System.Int32' from its string representa{ion 'ViewData[\"NoiId\"]' for the 'applicationId' property."}
很明显,无论我包含什么,都是按字面解释,而不是让服务器替代值。
我也试过设置一个变量并使用它,但错误是一样的。
正在工作的是访问用户控制器中的ViewData['NoiId']
:
protected void Page_Load(object sender, EventArgs e) { ... Debug.WriteLine("In the controller, ViewData['NoiId'] is: " + ViewData["NoiId"]); } > In the controller, ViewData['NoiId'] is: 6191
在我看来:
- 用户控件最初是在应用程序启动之前的服务器上构建的。 因此,为什么我不能传递任何
<%
参数。 - 并且传递参数唯一的方法是通过
ViewData
和类似的机制,这些机制将在生命周期“运行时”稍后解释。
但是,如果可能的话,我更喜欢传递参数作为参数。
可能吗? 或者我对上述第2段的理解是否正确?
我认为您在ASP.NET中使用MVC
模式,并且您倾向于将参数从View
传递给UserControl
。 为此,您不能在视图页面中使用以下代码:
因为视图页面没有代码。 要将参数传递给UserControl
,您可以使用以下代码:
<% Html.Partial("~/Views/Home/SpeciesGridController.ascx", ViewData["NoiId"]); %>
Html.Partial
或Html.RenderPartial
用于在ASP.NET MVC
加载ascx
或Partial View
。 然后你可以得到ViewData["NoiId"]
并在Page_Load
中将它设置为ascx
变量或属性,如下所示: