Добавить пользовательский элемент управления в опубликованный веб-проект - PullRequest
0 голосов
/ 22 сентября 2010

Я начинаю задумываться, возможно ли это вообще. Это кажется таким простым.

У меня есть опубликованный веб-проект. Я хочу добавить некоторые файлы .ascx (с файлами .cs & designer.cs) на этот опубликованный веб-сайт. Это простые пользовательские элементы управления, которые обращаются к методам, уже являющимся частью исходного приложения.

Вопрос? Можно ли просто отбросить их в опубликованном веб-проекте, не создавая всего решения? Если нет, то почему?

Когда я помещаю эти файлы и запускаю свое приложение, я получаю сообщение об ошибке: «Ошибка разбора: не удалось загрузить тип« имя моего пространства имен пользовательских элементов управления »».

Не так много кода, чтобы показать, так что это все, что у меня есть.

Default.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
}
}

Снова это кажется таким легким. Что мне не хватает? Или это невозможно? Благодаря.

UPDATE: Я понял это. Данный сценарий возможен. Проблема не в пространстве имен, как предполагает сообщение об ошибке. Скорее это декларация кода. Файлы с выделенным кодом для файлов любого типа компилируются при публикации приложения. Я все еще не могу понять, почему он выглядит редактируемым, когда вы просматриваете веб-каталог, я думаю, он будет сохранен в файле .dll или что-то в этом роде. Может быть, кто-то может пролить свет на это.

В любом случае, замена выделенного кода кодом-файлом устраняет проблему, так как файлы-коды не компилируются и, следовательно, читаются во время выполнения приложения.

Некоторые полезные ссылки можно найти здесь и здесь .

Ответы [ 2 ]

0 голосов
/ 18 июля 2012

Этот подход может быть небрежным, вы в основном либо

  • 1) Создаете пользовательский элемент управления в неправильном проекте
  • 2) Пытаетесь добавить один и тот же пользовательский элемент управления в два проекта.

Задумывались ли вы о более чистом подходе и просто создании класса, унаследованного от System.Web.Ui.Control, а затем добавлении его в проект .common?Тогда потянув это в проект corrct?Проблема с вашим подходом заключается в прекомпиляции и развертывании. В итоге вы можете попытаться поместить два пользовательских элемента управления в одну папку, что нарушит сборку ....

Альтернативный подход (и способ Microsoft) будетвот так ...

Код - написать пользовательский элемент управления

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);
        }
    }
}

Ссылка на страницу - как ссылаться на нее в вашем пользовательском интерфейсе проекта

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

Web.config - что нужно для импорта этого элемента управления на все ваши страницы пользовательского интерфейса

<add tagPrefix="CommonControls" namespace="MyProject.Common.Controls" assembly="MyProject.Common"/>
0 голосов
/ 22 сентября 2010

Возможно, но вам все равно придется скомпилировать свой пользовательский элемент управления и поместить этот dll в соответствующий каталог bin для вашего приложения. Это обычно является причиной описанной вами ошибки загрузки типа.

...