次のコードを使用して、ASP.NET Web フォームにプログラムで追加されたユーザー コントロールを含む ASP.NET Web サイトを取得しました。
var control = (Deal)LoadControl("Deal.ascx");
control.ImageFile = dealNode.SelectSingleNode("thumbnail").InnerText;
control.ProductName = dealNode.SelectSingleNode("product").InnerText;
control.PriceText = dealNode.SelectSingleNode("price").InnerText;
DealList.Controls.Add(control);
Deal コントロールは非常にシンプルです。
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Deal.ascx.cs" Inherits="Deal" %>
<div class="deal">
<img id="DealImage" runat="server" class="dealimage" />
<div class="dealtext"><asp:Label ID="DealLabel" runat="server"></asp:Label></div>
<div class="dealprice"><asp:Label ID="DealPriceLabel" runat="server"></asp:Label></div>
</div>
その背後にあるコードで:
public string ImageFile { get; set; }
public string ProductName { get; set; }
public string PriceText { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
this.DealImage.Src = "images/" + ImageFile;
this.DealLabel.Text = ProductName;
this.DealPriceLabel.Text = PriceText;
}
Visual Studio 2010 で Web サイトを実行すると、通常は正常に動作します。ただし、頻繁に (通常はチェックイン後または VS2010 の再起動後)、あきらめてコンパイルしません。エラーが発生します:
The type or namespace name 'Deal' could not be found (are you missing a using directive or an assembly reference?)
問題は、次の行のキャストです。
var control = (Deal)LoadControl("Deal.ascx");
ユーザーコントロールの Page_Load コードをコメントアウトして再コンパイルし、コードのコメントを外して再コンパイルすると、すべて問題ありません。
誰が何が起こっているのか教えてもらえますか?