我是ASP.net的新手,并继承了一个应用程序进行更新。虽然我已经遇到了一些情况,但我需要一些帮助才能理解。
我有一个用户控件uc:speciesgrid
,它带有一些参数:applicationId
和species
应该来自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
在我看来:
<%
个参数。ViewData
和类似的机制,这些机制将在生命周期的后期解释&#34;在运行时&#34;。但是,如果可能的话,我更喜欢将参数作为参数。
有可能吗?或者我对上述第2段的理解是否正确?
答案 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.Partial
或Html.RenderPartial
用于ascx
中的加载Partial View
或ASP.NET MVC
。然后,您可以获取ViewData["NoiId"]
并将其设置为ascx
中Page_Load
的变量或属性,如下所示: