MadDog23 Ответов: 1

Как установить свойство text для динамически создаваемого поля hyperlinkfield


Все аспекты моего кода работают и работают правильно, но я понял, что URL-адрес для моего поля HyperLinkField слишком длинный, чтобы его можно было правильно отобразить. Как установить свойство text на слово "View"? Как вы можете видеть ниже, я уже установил свойство text в "View", но динамически созданный URL-адрес перезаписывает текст.
<div id="first" style="float:left;">
             <asp:GridView ID="GridView3" runat="server" AutoGenerateColumns="False" CellPadding="4" CellSpacing="1" HorizontalAlign="Center">
                    <Columns>
                        <asp:BoundField DataField="AccountNo" HeaderText="AccountNo" SortExpression="AccountNo" />
                        <asp:BoundField DataField="State" HeaderText="State" SortExpression="State" />
                        <asp:BoundField DataField="DocumentType" HeaderText="DocumentType" SortExpression="DocumentType" />
                        <asp:BoundField DataField="Error_MSG" HeaderText="Error_MSG" SortExpression="Error_MSG" />
                        <asp:BoundField DataField="Intent" HeaderText="Intent" SortExpression="Intent" />
                        <asp:BoundField DataField="LoadDate" HeaderText="LoadDate" SortExpression="LoadDate" />
                        <asp:HyperLinkField DataTextField="EncryptedURL" DataNavigateUrlFields="EncryptedURL" Text="View"  HeaderText="EncryptedURL"/>
                    </Columns>
             </asp:GridView>
       </div><pre lang="c#">


Вот код, который срабатывает в событии загрузки страницы

using (SqlConnection con = new SqlConnection("Data Source=test;Initial Catalog=test;User ID=te;Password=great"))
{
    lblAcct.Text = Request.QueryString["Account"];
    con.Open();
    SqlCommand cmd = new SqlCommand(" Select * from test.dbo.test where AccountNo = '" + lblAcct.Text + "'", con);
    SqlDataReader dr = cmd.ExecuteReader();
    GridView3.DataSource = dr;
    GridView3.DataBind();
    con.Close();
}


Что я уже пробовал:

Опять же, я уже пытался установить свойство text на "View", но поскольку данные динамически добавляются в gridview, текст переписывается.

Есть мысли?

1 Ответов

Рейтинг:
6

Richard Deeming

Вы установили оба Text и DataTextField свойства. То DataTextField будет перезаписывать Text значение со значением из источника данных.

Снять DataTextField свойство, и оно должно начать использовать Text вместо этого собственность:

<asp:HyperLinkField DataNavigateUrlFields="EncryptedURL" Text="View"  HeaderText="EncryptedURL"/>


Однако, у вас есть серьезная уязвимость системы безопасности[^] в вашем коде. Вы должны немедленно исправить это и просмотреть любой другой код базы данных, который вы написали, чтобы проверить и исправить уязвимость.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]

string account = Request.QueryString["Account"];
lblAcct.Text = Server.HtmlEncode(account); // Encode the value to avoid cross-site scripting

using (SqlConnection con = new SqlConnection("Data Source=test;Initial Catalog=test;User ID=te;Password=great"))
using (SqlCommand cmd = new SqlCommand("Select * from test.dbo.test where AccountNo = @AccountNo", con))
{
    cmd.Parameters.AddWithValue("@AccountNo", account); // Use parameters to avoid SQL Injection
    
    con.Open();
    using (SqlDataReader dr = cmd.ExecuteReader())
    {
        GridView3.DataSource = dr;
        GridView3.DataBind();
    }
}


MadDog23

Ничего себе, это было просто. Спасибо за решение и Совет, Ричард.