2017-09-11 52 views
0

我是ASP.net的新手,並且繼承了更新的應用程序。雖然我遇到了一些困難,但我需要一些幫助理解。Asp.Net WebForms - 如何將ViewData作爲參數傳遞給用戶控件

我有一個用戶控件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 

這似乎對我說:

  • 用戶控件initialy建立在服務器上的「前」是申請開始。因此爲什麼我不能通過任何<%的論點。
  • 並且傳遞參數的唯一方法是通過ViewData以及在運行時在生命週期後面解釋的類似機制。

但是我寧願傳遞參數作爲參數,如果可能的話。

可能嗎?或者,我在上面第2段中的理解是否正確?

回答

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用於負載ascxPartial ViewASP.NET MVC。然後你就可以得到ViewData["NoiId"]Page_Load這樣將其設置爲可變或ascx屬性:

UserControl

+0

是感謝阿里,這就是我的工作了。我問了同樣的問題,但更精確地在https:// stackoverflow中。com/questions/46168566/asp-net -c-sharp-generate-user-control-parameters/46210657#46210657並提供了一個答案。 – HankCa

相關問題