Нужна помощь в отображении данных инсайдерской марки - PullRequest
0 голосов
/ 29 марта 2009

Я хочу отображать новости внутри разметки разметки в своем банковском приложении, но этого не происходит. Пожалуйста, кто-нибудь, помогите мне, что является ошибкой в ​​моем коде. Вот мой код:

<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;
        } 
    }

1 Ответ

0 голосов
/ 30 марта 2009

Session [ "Новости" + я]

Но вы не помещаете в область сеанса ничего, что называется «новости» плюс целое число. Вы перебираете набор данных и сохраняете каждый заголовок (с загадочным префиксом в виде целого числа) как свойство «News_Name» в одном объекте News. Каждая запись в «News_Name» перезаписывает предыдущую, поэтому в конце сеанса [«news»] сохраняется только последний заголовок.

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

Кроме того, вы Response.Write () вводите строку без HTMLEncode (), добавляя ее при выходе, что является плохой новостью для безопасности (особенно на «банковском сайте»!), Если заголовок новости может в нем есть символ «<». И я не совсем уверен, почему вы берете целое число «newscount», конвертируете его в строку, снова конвертируете в строку, снова конвертируете в строку, а затем в конце разбираете обратно в целое число. (?) </p>

В общем, это выглядит как неудобное сочетание классического 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 *]

...