English 中文(简体)
需要帮助在跑马灯中显示数据。
原标题:
  • 时间:2009-03-29 06:27:00
  •  标签:

我想在我的银行应用程序中使用跑马灯标记显示新闻,但它没有发生。请有人帮我看看我的代码有什么错误。这是我的代码:

<marquee bgcolor="silver" direction="left" id="marq1" runat="server" behavior="scroll" scrolldelay="80" style="height: 19px" width="565">
<% 
   String se = Session["countnews"].ToString();
   for (int i = 0; i < int.Parse("" +se); i++)
   { %>
       <strong><%Response.Write("&nbsp;&nbsp;" + Session["news"+i] + "&nbsp;&nbsp;"); %></strong>
<% } %>
</marquee>

public class News
{
    DataSet ds = new DataSet("Bank");
    SqlConnection conn;
    String check;
    SqlDataAdapter sda;
    int i;
    public string News_Name;
    public int Count_News;
public int newsticker()
    {
        conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BankingTransaction"].ConnectionString.ToString());
        check = "Select NewsTitle from News where NewsStatus =  A ";
        sda = new SqlDataAdapter(check, conn);
        sda.Fill(ds, "News");
        if (ds.Tables[0].Rows.Count > 0)
        {
            for (i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                News_Name =i+ ds.Tables[0].Rows[i].ItemArray[0].ToString();
            }
            Count_News = ds.Tables[0].Rows.Count;        }
        else
        {
            News_Name =0+ "Welcome to WestSide Bank Online Web site!";
            Count_News = 1;
        }
        return int.Parse(Count_News.ToString());       
    }

protected void Page_Load(object sender, EventArgs e)
    {
        News obj = new News();
        try
        {
            obj.newsticker();
            Session["news"] = obj.News_Name.ToString();
            Session["countnews"] = obj.Count_News.ToString();       
        }
        catch (SqlException ex)
        {
            Response.Write("Error in login" + ex.Message);
            Response.Redirect("Default.aspx");
        }
        finally
        {
            obj = null;
        } 
    }
问题回答

会话["新闻" + i]

但您没有把任何名为“新闻”加上整数的东西放入会话范围中。您正在遍历数据集,并将每个标题(神秘地前缀为整数)存储为单个News对象中的“News_Name”属性。对“News_Name”的每次写入都会覆盖上一个,因此只有最后一个标题在Session["news"]中存储到最后。

无论如何,会话是存储每页数据的麻烦地方:会话适用于在多个页面加载期间持续存在的数据,如果用户同时加载两个页面,会话可能会干扰。

同时,如果新闻标题中包含“<”字符,您在使用Response.Write()时未对其进行HTMLEncode()处理,这对安全性非常不利(特别是在“银行网站”上!)。而且我不太确定您为什么要将“newscount”整数转换为字符串,再将其转换为字符串,再将其转换为字符串,最后才将其解析回整数。 (?)

总的来说,这似乎是经典ASP和代码后台技术的不舒适混合。在我看来,使用类似以下的东西写这个应该可以更加简单:

<asp:Repeater DataSourceID="TickerSource" runat="server">
    <ItemTemplate><strong>
        <%# Eval("NewsTitle") %>
    </strong></ItemTemplate>
</asp:Repeater>

<asp:SqlDataSource ID="TickerSource" runat="server"
    SelectCommand="SELECT NewsTitle FROM News WHERE NewsStatus= A "
    ConnectionString="<%$ ConnectionStrings:BankingTransaction %>"
/>

[免责声明:我从未在我的生活中编写过一行ASP.NET代码,因此这可能不起作用。更熟悉.NET的用户的编辑是可取的。]





相关问题
热门标签