1

次のコードを使用して、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 コードをコメントアウトして再コンパイルし、コードのコメントを外して再コンパイルすると、すべて問題ありません。

誰が何が起こっているのか教えてもらえますか?

4

1 に答える 1

2

ページ マークアップ内のコントロールへの参照を追加してみてください。

<%@ Reference Control="MyUserControl.ascx" %>

こちらをご覧ください

于 2012-09-26T11:16:14.687 に答える