Как создать пользовательский элемент управления существующего пользовательского элемента управления - PullRequest
0 голосов
/ 08 декабря 2011

Я создал один пользовательский элемент управления для multiple file upload, Мне нужно создать его пользовательский элемент управления, чтобы я мог иметь DLL этого элемента управления. Как я могу это сделать?

usercontrol.ascx

<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
  <script src="Scripts/jquery.MultiFile.pack.js" type="text/javascript"></script>
    <div><%-- accept attribute can be used like accept="png|jpg"--%>
                    Multiple File Upload<br />
                    <asp:FileUpload ID="FileUpload10" runat="server" class="multi" accept="" />
                    <asp:Button ID="Button3" runat="server" Text="Submit" OnClick="jQueryUploadFiles" />

        <br />
        <asp:Label ID="lblMessage" runat="server" EnableViewState="false" ForeColor="Green" />
        <br />
        <asp:Label ID="lblError" runat="server" EnableViewState="false" ForeColor="Red" />
    </div>

usercontrol.ascx.cs

  private void FileUploadUsingJQuerySelectionMethod()
        {
            // check if file has been selected
            HttpFileCollection files = Request.Files;
            for (int i = 0; i < files.Count; i++)
            {
                HttpPostedFile file = files[i];
                if (file.ContentLength > 0)
                {
                    string path = ConfigurationManager.AppSettings["FilePath"];
                    string fileName = Path.GetFileName(file.FileName);

                    // now save the file to the disk
                    file.SaveAs(path + fileName);

                    lblMessage.Text += "File : <b>" + fileName + "</b> uploaded successfully !<br />";
                }
            }
        }

Я пытался так:

public class MultipleFileUpload : WebControl
{
   #region declare controls here
    Label lblMessage;
    Label lblError;
    FileUpload FileUpload10;
    Button btnUpload;
   #endregion

    [Bindable(true)]
    [Category("Appearance")]
    [DefaultValue("")]
    [Localizable(true)]
    public string FilePath
    {// prop to get filepath
        get
        {
            String s = (String)ViewState["FilePath"];
            return ((s == null) ? "[" + this.ID + "]" : s);
        }

        set
        {
            ViewState["FilePath"] = value;
        }
    }

    protected override void RenderContents(HtmlTextWriter output)
    {
        output.Write(FilePath);
    }

   // create the layout (html) of your control here
   // all the HTML code including <div>
   // Add all controls to the <div>, below code is very crude.<br/>       
   // Also you need to register the script  tags and add the script to it<br/>

    protected override void CreateChildControls()
    {
        base.CreateChildControls();
        Table table = new Table();
        this.Controls.Add(table);
        lblMessage = new Label();
        lblMessage.ID = "lblMessage";

        lblError = new Label();
        lblError.ID = "lblError";

        FileUpload10 = new FileUpload();
        FileUpload10.ID = "FileUpload10";

        btnUpload = new Button();
        btnUpload.ID = "btnUpload";
        btnUpload.Text = "Submit <br/> ";
       // table.Controls.Add(lblMessage);
    }
    // invoke this method were ever required
    private void FileUploadUsingJQuerySelectionMethod()
    {
        // check if file has been selected
        HttpFileCollection files = HttpContext.Current.Request.Files;
        for (int i = 0; i < files.Count; i++)
        {
            HttpPostedFile file = files[i];
            if (file.ContentLength > 0)
            {
                string path = FilePath;
                string fileName = Path.GetFileName(file.FileName);

                // now save the file to the disk
                file.SaveAs(path + fileName);

                lblMessage.Text += "File : <b>" + fileName + "</b> uploaded successfully !<br />";
            }
        }
    }

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

Вы можете добавить файлы js, встраивая их в dll, т.е.

  1. Включая их как обычно в проект пользовательского элемента управления
  2. Щелкните правой кнопкой мыши и выберите «встроенные ресурсы»
  3. Доступ через диспетчер ресурсов, поскольку они теперь являются частью файла ресурсов по умолчанию, т.е.

Stream ms = Assembly.GetExecutingAssembly () .GetManifestResourceStream ("имя ресурса, включая пространство имен");

  1. Затем прочитайте поток, чтобы получить скрипт в виде строки
  2. Зарегистрируйте строку скрипта в ScriptManager обычным способом
1 голос
/ 08 декабря 2011

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

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

0 голосов
/ 08 декабря 2011

Для создания веб-элемента управления вам необходимо наследовать от UserControl или другого элемента управления, в вашем случае FileUpload, а затем переопределить событие init, чтобы добавить другие элементы управления (например, кнопка) в дерево. При необходимости переопределите любые другие события.

Старая статья, но довольно ясная, например основной суммы:

http://www.codeproject.com/KB/validation/textboxwithvalidator.aspx

...