0

これが可能かどうかさえ疑問に思い始めています。とてもシンプルに思えます。

公開された Web プロジェクトがあります。その公開された Web サイトにいくつかの .ascx ファイル (.cs および designer.cs ファイルを含む) を追加したいと考えています。これらは、元のアプリケーションの一部であるメソッドにアクセスする単純なカスタム ユーザー コントロールです。

質問?ソリューション全体を構築せずに、公開された Web プロジェクトにこれらをドロップすることは可能ですか? そうでない場合、なぜですか?

これらのファイルをドロップしてアプリケーションを実行すると、「解析エラー: タイプ 'カスタム コントロール名前空間の名前' を読み込めませんでした」というエラーが表示されます。

表示するコードはそれほど多くないため、これがすべてです。

デフォルト.aspx

<%@ Page Language="C#" MasterPageFile="~/MasterPages/TwoColumn.master" AutoEventWireup="true"
    Inherits="ApplicationName.Web.Default" CodeBehind="Default.aspx.cs" %>

<%@ Register TagPrefix="uc1" TagName="CustomControl" Src="~/Controls/Custom/CustomControl.ascx" %>
<asp:Content ID="content" contentplaceholder="cph" runat="Server">
<uc1:CustomControl ID="cc1" runat="server" CustomProperty="Hello World" />
</asp:Content>

CustomControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CustomControl.ascx.cs"
    Inherits="ApplicationName.Web.Controls.Custom.CustomControl" %>
<asp:PlaceHolder ID="ph1" runat="server></asp:PlaceHolder>

CustomControl.ascx.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ApplicationName.Web.Controls.Custom
{
public partial class CustomControl : System.Web.UI.UserControl
{
///My logic
}
}

繰り返しますが、とても簡単に思えます。私は何が欠けていますか?それとも、これは不可能ですか?ありがとう。

更新: 私はこれを理解しました。上記のシナリオが可能です。エラー メッセージが示すように、名前空間に問題はありません。むしろ、コード ビハインド宣言です。あらゆる種類のファイルのコード ビハインド ファイルは、アプリケーションの公開時にコンパイルされます。Web ディレクトリをブラウズしたときに編集可能に見える理由については、まだ混乱しています。.dll ファイルなどに保存されているのではないかと思います。たぶん、誰かがこれに光を当てることができます。

とにかく、コード ビハインドをコード ファイルに置き換えると、コード ファイルがコンパイルされないため、アプリケーションの実行時に読み取り可能になるため、問題が修正されます。

役立つリンクがいくつかありますここここ.

4

2 に答える 2

0

このアプローチはずさんな可能性があります。基本的にはどちらかです

  • 1) 間違ったプロジェクトでユーザー コントロールを作成する
  • 2) 2 つのプロジェクトに同じユーザー コントロールを追加しようとしている

System.Web.Ui.Control から継承するクラスを作成し、これを .common プロジェクトに追加する、よりクリーンなアプローチについて考えたことはありますか? 次に、これを正しいプロジェクトに取り込みますか? あなたのアプローチの問題は、ビルドを壊す同じフォルダーに2つのユーザーコントロールを入れようとすることになる可能性があるプリコンパイルと展開にあります....

代替アプローチ(およびマイクロソフトの方法)は次のようになります...

コード - カスタム コントロールを作成する

namespace MyProject.Common.Controls
{
    public class PolicyTab : System.Web.UI.Control
    {
        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            HtmlGenericControl policyTab = new HtmlGenericControl();
            policyTab.InnerHtml = "<strong> Some policy code here! </strong>";

            this.Controls.Add(policyTab);
        }
    }
}

ページ参照 - UI プロジェクトで参照する方法

<CommonControls:PolicyTab runat="server" ID="temp"></CommonControls:PolicyTab>

Web.config - このコントロールをすべての UI ページにインポートするために必要なもの

<add tagPrefix="CommonControls" namespace="MyProject.Common.Controls" assembly="MyProject.Common"/>
于 2012-07-18T12:17:12.200 に答える
0

可能ですが、ユーザー コントロールをコンパイルし、その dll をアプリの適切な bin ディレクトリにドロップする必要があります。これが通常、説明した型読み込みエラーの原因です。

于 2010-09-22T18:08:07.603 に答える