在绑定到asp.net转发器

时间:2015-11-12 13:19:23

标签: c# asp.net httpwebrequest repeater

我有一个绑定到asp.net转发器控件的数据集

其中一列是外部网页的打开图形图像的网址。

我将url存储在我的数据库中,但是在一段时间后发现有些停止显示,可能是因为图像网址已经更改。因此,我想检查图形图像网址是否返回响应,如果没有,则返回我的占位符网址。我不想替换我的数据库中的url,以防它是一个临时问题 - 我不想丢失原始URL。

假设我创建数据集的代码是:

SqlCommand countMostRead = new SqlCommand(getMostread, dbcon);
        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter(countMostRead);
        da.Fill(ds);
        rptLatest.DataSource = ds;
        rptLatest.DataBind();

图形图像网址是数据集中的第一列,有没有办法检查每行的数据集列0,如果图形图像网址不存在则更改它?

我想我需要在column0上运行foreach,运行我的httpweb请求

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
        request.Method = "HEAD";

        bool exists;
        try
        {
            request.GetResponse();
            exists = true;
            return exists;
        }
        catch
        {
            exists = false;
            return exists;
        }

如果httpwebrequest返回false,则将列数据更改为我的占位符网址。

但是,我不确定这是否确实是正确的方法,如果是这样,那么正确的语法是什么?

有人可以建议实现此目的的代码吗?或者,如果我正在咆哮错误的树,请提出另一种方法。

编辑 - 作为暂定的刺,我试过这个:

foreach (DataTable table in ds.Tables)
        {
            foreach (DataRow row in table.Rows)
            {
                string imgURL = row[0].ToString();
                bool graphImageExists = graphImageExists(imgURL);
                if (graphImageExists)
                {

                }
                else
                {
                    row[0] = "my placeholder";
                }
            }
        }

graphImageExists()运行httpwebrequest。这不会返回错误,但在必要时似乎没有将数据更改为占位符 - 有任何建议吗?

3 个答案:

答案 0 :(得分:0)

我认为您的方法还可以。 只要您不尝试下载该文件,就可以使用HttpWebRequest发送HEAD请求(以检查该文件是否存在):

HttpWebResponse resp = null;
var req = (HttpWebRequest)WebRequest.Create("the URL");
req.Method = "HEAD";
resp = (HttpWebResponse)req.GetResponse();

如果您收到WebException,则表示该文件不存在。

希望它有所帮助。

答案 1 :(得分:0)

我想我现在明白了。您的问题似乎是在尝试对转发器的源进行数据绑定后尝试更改URL。在您对转发器的源进行数据绑定之前,请尝试进行URL检查;如果不可能,请使用Repeater.ItemDataBound事件 ( https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound(v=vs.110).aspx

希望这有帮助。

答案 2 :(得分:0)

  1. 确保调用itemdatabound事件。
  2. 将此代码放入事件中:

            string imgURL = row[0].ToString();
            bool graphImageExists = graphImageExists(imgURL);
            if (graphImageExists)
            {
    
            }
            else
            {
                row[0] = "my placeholder";
            }