Asp.Net WebForms - 如何将ViewData作为参数传递给用户控件

时间:2017-09-11 08:09:30

标签: c# asp.net user-controls

我是ASP.net的新手,并继承了一个应用程序进行更新。虽然我已经遇到了一些情况,但我需要一些帮助才能理解。

我有一个用户控件uc:speciesgrid,它带有一些参数:applicationIdspecies应该来自ViewData并作为参数传递,但我找不到有效的语法。对它的硬编码调用(有效)是:

<uc:speciesgrid runat="server" ID="speciesgrid1" applicationId="6191" species="Dog"/>

我尝试了<%, <%=, <%#的所有组合,但没有一个可行。如下所示:

<uc:speciesgrid runat="server" ID="speciesgrid1" applicationId='<%AppData["NoiId"]%>' species="Dog"/>

错误完全相同:

{"Cannot create an object of type 'System.Int32' from its string representa{ion 'ViewData[\"NoiId\"]' for the 'applicationId' property."}

很明显,无论我包括什么,都是按字面解释,而不是让服务器替换价值。

我也尝试过设置变量并使用它,但错误是一样的。

<%
var applicationId = ViewData["NoiId"];
%>

在用户控制器中访问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

在我看来:

  • 用户控件最初是在服务器上构建的&#34;之前&#34;该应用程序启动。因此,为什么我无法传递任何<%个参数。
  • 传递参​​数唯一的方法是通过ViewData和类似的机制,这些机制将在生命周期的后期解释&#34;在运行时&#34;。

但是,如果可能的话,我更喜欢将参数作为参数。

有可能吗?或者我对上述第2段的理解是否正确?

1 个答案:

答案 0 :(得分:0)

我认为您在ASP.NET中使用MVC模式,并且您倾向于将参数从View传递到UserControl。为此,您不能在视图页面中使用以下代码:

<uc:speciesgrid runat="server" ID="speciesgrid1" applicationId="6191" species="Dog"/>

因为视图页面后面没有代码。要将参数传递给UserControl,您可以使用以下代码:

<% Html.Partial("~/Views/Home/SpeciesGridController.ascx", ViewData["NoiId"]); %>

Html.PartialHtml.RenderPartial用于ascx中的加载Partial ViewASP.NET MVC。然后,您可以获取ViewData["NoiId"]并将其设置为ascxPage_Load的变量或属性,如下所示:

UserControl