0

銀行のアプリケーションのマーキーマークアップ内にニュースを表示したいのですが、発生していません。誰かが私のコードのエラーを教えてください。私のコードは次のとおりです。

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

1 に答える 1

0

セッション["ニュース"+i]

しかし、'news'-plus-an-integer と呼ばれるものを Session スコープに入れているわけではありません。データセットを反復処理し、各タイトル (不思議なことに整数のプレフィックスが付いている) を 'News_Name' プロパティとして単一のニュース オブジェクトに格納しています。「News_Name」に書き込むたびに前のタイトルが上書きされるため、最後のタイトルのみが最後に Session["news"] に保存されます。

いずれにせよ、Session はページごとのデータを格納するのに厄介な場所です。Session は、複数のページの読み込みにわたって保持されるデータ用であり、ユーザーが一度に 2 つのページを読み込むと干渉する可能性があります。

また、ニュースのタイトルに「 <' その中のキャラクター。そして、「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 に精通したユーザーからの編集を歓迎します。]

于 2009-03-30T15:41:50.520 に答える