Как разместить поле гиперссылки на веб-странице во время выполнения? - PullRequest
1 голос
/ 26 июля 2010

Я пытаюсь отобразить содержимое папки в гиперссылке.Я также использую masterpage.Гиперссылки не отображаются на странице содержимого.что для этого сделать?

Я знаю, что в формах Windows мы можем использовать, например, TextBox.Location = new Point (100,100);

Но как это сделать на веб-странице ... пожалуйста, кто-нибудь предложитменя ..

моя кодировка в page_load -

protected void Page_Load(object sender, EventArgs e)
{
    DirectoryInfo di = new DirectoryInfo(Server.MapPath("~/ProjectsUpload"));
    int i = 0;
    foreach (FileInfo fi in di.GetFiles())
    {
        HyperLink HL = new HyperLink();
        HL.ID = "HyperLink" + i++;
        HL.Text = fi.Name;
        HL.NavigateUrl = "downloading.aspx?file=" + fi.Name;
        Page.Controls.Add(HL);
        Page.Controls.Add(new LiteralControl("<br/>"));
    }
}

Ответы [ 5 ]

2 голосов
/ 26 июля 2010

Вы не можете добавить его непосредственно к Page.Controls.Вы должны добавить его к ContentPlaceHolder на странице.

1 голос
/ 26 июля 2010

Поместите элемент управления PlaceHolder на свою страницу:

<asp:PlaceHolder runat="server" ID="ph" />

В своем коде напишите наподобие:

HyperLink HL = new HyperLink();
HL.ID = "HyperLink" + i++;
HL.Text = fi.Name;
HL.NavigateUrl = "downloading.aspx?file=" + fi.Name;
ph.Controls.Add(HL);
ph.Controls.Add(new Literal { Text = "<br/>"});

Я использую недавно добавленную функцию C # 3 для этого последнегострока для установки свойства Text.

1 голос
/ 26 июля 2010

Вместо того, чтобы динамически создавать элементы управления, которые являются довольно грязными и подверженными ошибкам, вы рассматривали возможность использования элемента управления asp:Repeater и привязки файлов непосредственно к нему? Что-то вроде:

<asp:Repeater ID="RepeaterFiles" runat="server">
    <ItemTemplate>
        <asp:HyperLink runat="server" Text='<%# Container.DataItem %>' 
            NavigateUrl='<%# String.Format("downloading.aspx?file={0}", Container.DataItem)%>' />
        <br />
    </ItemTemplate>
</asp:Repeater>

и в коде позади:

DirectoryInfo di = new DirectoryInfo(Server.MapPath("~/ProjectsUpload"));
RepeaterFiles.DataSource = di.GetFiles();
RepeaterFiles.DataBind();

Таким образом, вы можете использовать декларативную разметку для управления макетом и сохранения логики в вашем коде.

0 голосов
/ 26 июля 2010

Создайте Panel или Label в области «Содержимое страницы» и добавьте свои гиперссылки в коллекцию Controls панели.

(пошагово просматривая код, чтобы проверить, действительно ли приложение IIS перечисляет какие-либо файлы всправочник тоже поможет.)

0 голосов
/ 26 июля 2010

Использовали ли вы отладчик для пошагового прохождения цикла и проверки того, что он обрабатывает хотя бы один файл?

Вместо добавления ссылок на Page.Controls, вы можете поместить элемент управления списком на страницу, изатем добавьте каждую ссылку в элемент списка.Тогда бы вы точно знали, где на странице они должны появиться.

...