Asp.Net WebForms – 如何将ViewData作为param传递给用户控件

我是ASP.net的新手,并inheritance了一个应用程序进行更新。 虽然遇到了一些我需要帮助理解的情况,但我的情况还算不错。

我有一个用户控件uc:speciesgrid ,它接受一些参数: applicationIdspecies应该来自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.PartialHtml.RenderPartial用于在ASP.NET MVC加载ascxPartial View 。 然后你可以得到ViewData["NoiId"]并在Page_Load中将它设置为ascx变量或属性,如下所示:

用户控件