Ссылка на объект не установлена ​​для экземпляра объекта (исключение NullreferenceException было обработано кодом пользователя) - PullRequest
2 голосов
/ 14 апреля 2010

Как мне обойти это исключение?

Dim imagepathlit As Literal = DownloadsRepeater.FindControl("imagepathlit")
        imagepathlit.Text = imagepath

Вот ретранслятор:

<asp:Repeater ID="DownloadsRepeater" runat="server">

<HeaderTemplate>
<table width="70%">
<tr>
<td colspan="3"><h2>Files you can download</h2></td>
</tr>
</HeaderTemplate>

<ItemTemplate>
<tr>
<td width="5%">
<asp:Literal ID="imagepathlit" runat="server"></asp:Literal></td>
<td width="5%"></td>
<td>&nbsp;</td>
</tr>
</table>
</ItemTemplate>

</asp:Repeater>

Вот код, который получает данные для ретранслятора:

c.Open()
        r = x.ExecuteReader
        While r.Read()
            If r("filename") Is DBNull.Value Then
                imagepath = String.Empty
            Else
                imagepath = "<img src=images/" & getimage(r("filename")) & " border=0 align=absmiddle>"
            End If

        End While
        c.Close()
        r.Close()

Ответы [ 4 ]

1 голос
/ 14 апреля 2010

Предполагая, что код, который вы опубликовали, действительно генерирует исключение, я бы сказал, что DownloadRepeater не имеет элемента управления с идентификатором imagepathlit.

Проверьте свои aspx.

1 голос
/ 14 апреля 2010

Поскольку элемент управления находится внутри ItemTemplate, вы не можете использовать repeatater.findcontrol; Вы должны пройтись по элементам повторителя, чтобы найти элемент управления, так как шаблон элемента повторяется. Поэтому вам нужно пройтись по каждой из них, чтобы найти элемент управления, как в:

foreach (var item in repeater.Items)
{
   var control = item.FindControl("ID") as Type;
}

Используйте этот синтаксис.

1 голос
/ 14 апреля 2010

Я предполагаю, что в элементе управления DownloadsRepeater с именем imagepathlit не найден элемент управления, поэтому элемент управления imagepathlit после вызова является нулевым.

Помните, что Control.FindControl() ищет элемент управления на основе ID, а не его имени. Поэтому, чтобы найти элемент управления в коллекции ... вы должны иметь что-то подобное ранее в приложении:

Dim imagepathlit As Literal = new Literal()
imagepathlit.ID = "imagepathlit"

UPDATE

Поскольку вы используете ретранслятор, дочерние элементы управления размещаются немного по-другому. У вас будет экземпляр Literal для каждого Item в Repeater. Поэтому, чтобы получить каждый экземпляр элемента управления, вы должны пройти по Items в Repeater и вызывать FindControl() для каждого Item:

For Each item As Item In DownloadsRepeater.Items
    Dim imagepathlit As Literal = item.FindControl("imagepathlit")
Next
0 голосов
/ 28 февраля 2018

Мой код:

protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
{
    SqlConnection Conn = new
  SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
    SqlCommand Cmd = new SqlCommand();
    if (e.CommandName =="Buy")
    {
        ImageButton img = (ImageButton)e.CommandSource;
        int Index = Convert.ToInt32(e.CommandArgument);
        GridViewRow Row = GridView2.Rows[Index];
        Label l1 = (Label)Row.FindControl("Label3");
        Label l2 = (Label)Row.FindControl("Label2");
        Label l3 = (Label)Row.FindControl("Label1");
        Session["user"] = "mohammad";
        Cmd = new SqlCommand("Insert Into Trade(pname,pdesc,price,uname)values('" + l1.Text + "','" + l2.Text + "','" + l3.Text.Replace("$", "") + "','" + Session["user"].ToString() + "')", Conn);
        Conn.Open();
        Cmd.ExecuteNonQuery();
        Conn.Close();
        string Url = "";
        Url += "https://www.sandbox.paypal.com/cgibin/webscr?cmd=_xclick&business=" + 
        ConfigurationManager.AppSettings["paypalemail"].ToString();
        Url += "&first_name=Mohamed";
        Url += "&city=chennai";
        Url += "&state=tamilnadu";
        Url += "&item_name=" + l1.Text;
        Url += "&amount=" + l3.Text.Replace("$", "");
        Url += "&shipping=5";
        Url += "&handling=5";
        Url += "&tax=5"; ;
        Url += "&quantity=1";
        Url += "&currency=USD";
        Url += "&return=" +
        ConfigurationManager.AppSettings["SuccessURL"].ToString();
        Url += "&cancel_return=" +
        ConfigurationManager.AppSettings["FailedURL"].ToString();
        Response.Redirect(Url);
    }
}
...