我正在嘗試制作一個新聞網站,我想讓新聞標題移動,一旦用戶將滑鼠放在標題上,它就會停止,如果單擊它,它將打開此新聞并顯示標題、詳細資訊和新聞照片。
我制作了一個名為 Site1.Master 的母版頁面,我制作了兩個內容頁面 WebForm2,它們顯示移動的新聞標題并使用變數 x 將 id 發送到 WebForm3。但是,一旦我點擊任何新聞,它就不會顯示任何內容。
WebForm2.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="newsSite.WebForm2" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<div id="n" runat="server">
</div>
</asp:Content>
WebForm2.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
namespace newsSite
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection("server=;uid=sa;pwd=;database=news");
cn.Open();
SqlCommand cm = new SqlCommand("select id,title from articles", cn);
SqlDataReader dr = cm.ExecuteReader();
string strTitle = "";
while (dr.Read())
strTitle = " <a herf=WebForm3.aspx?x=" dr["id"] ">" dr["title"] "</a> ";
n.InnerHtml = "<marquee id=news onm ouseover=news.stop(); onm ouseout=news.start();>" strTitle "</marquee>";
}
}
}
WebForm3.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="newsSite.WebForm3" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<div id="art" runat="server">
</div>
</asp:Content>
WebForm3.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
namespace newsSite
{
public partial class WebForm3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection("server=;uid=sa;pwd=;database=news");
cn.Open();
SqlCommand cm = new SqlCommand("select * from articles where id=" Request.Params["x"], cn);
SqlDataReader dr = cm.ExecuteReader();
while (dr.Read())
{
art.InnerHtml = "<b>" dr["Title"] "</br><br>";
art.InnerHtml = dr["Details"] "<br>";
art.InnerHtml = "<img src=images/" dr["photo"] " /><br>";
}
}
}
}
uj5u.com熱心網友回復:
您可以使用會話變數將值從表單發送到另一個,或將頁面發送到另一個。
您可以在此鏈接上找到有關其他方法的更多詳細資訊
uj5u.com熱心網友回復:
這可以使用各種狀態管理技術來實作,如視圖狀態、會話狀態、應用程式狀態和回發功能
ASP.NET 狀態管理
狀態管理
uj5u.com熱心網友回復:
這是一個很好的問題(也是一個很好的問題)。
為什么在 session() 上使用 ViewState?
好吧,首先我們使用 Session()。這對每個用戶都存在,對每個用戶都是全域的,并且是 100% 的服務器端(因此,它被認為是安全的)。
請記住,如果您不使用 SQL Server 管理的會話,那么這些值很容易被炸毀。但是, session[] 是傳遞值的好方法。
但是,排名第一的是什么?好吧,由于 session 是全球性的,假設我們在房屋串列中,然后我單擊一行(比如買房子)。好吧,我們現在跳轉到一個新頁面,一個 session() 可以擁有那所房子的 PK id。但是,如果我們右鍵單擊并打開一個新選項卡?好吧,現在您可以打開兩個選項卡,每個選項卡都顯示不同的房子,但是我們的 session() 設定為我們打開的最后一個。我們現在有可能買錯房子!!!
因此, session() 是每個用戶,而不是每個頁面。(天哪,希望有人能花 30 秒來包含上述資訊!!!)。
因此, session() 適合全域值和傳遞值。
但是,對于 row 和 datbase pk id 的東西?然后在頁面加載時,您抓取并采用一個條件標準,您可以傳輸該值以查看頁面加載時的狀態。這樣,你得到每頁..
這將我們帶到了 ViewState。Viewstate 不能真正用于傳遞值,但 viewstate 非常適合保存或保留當前頁面的值。因此,ViewState 是每頁 - 因此,如果有人碰巧右鍵單擊或運行兩個瀏覽器,您的代碼不會弄亂。
接下來?老測驗可靠嗎?
在 URL 中使用引數。我認為它們看起來很難看,但即使是這個站點 (SO) 也可以并且確實使用 URL 中的引數(通常稱為查詢引數)。
現在,您可以使用 URL 傳遞值,但用于敏感資訊或資料庫 PK 值?(非常糟糕的主意)。我記得互聯網早期的一個故事,一些信用卡系統使用帶有 id 的 URL。如果你輸入不同的ID,你可以看到其他人的信用卡資訊!!!
但是,即使是谷歌,這個站點和許多仍然使用引數。他們這樣做,因為這可以減少服務器端的負載和記憶體(資訊在 URL 客戶端)。
但是,在 .net 中還有一個非常好的選項和 LITTLE,稱為 Page.Previous。
這意味著您實際上可以參考、抓取、獲取或使用上一頁中的任何內容。但是,要做到這一點,需要做兩件事:
您使用的按鈕需要使用回發 URL。
并且您必須在第一頁加載 IsPostBack = false 上獲取資訊。
然而,這是經常被忽略的,并且能夠從上一頁中獲取任何值和任何控制元件而不必使用任何其他方法經常被忽略。如前所述,您必須在第一頁加載時獲取您的值,但可以通過這種方式獲取 Page.PrevousPage 中的所有值。如前所述,previousPage 僅在使用的按鈕具有 Postbank URL 時才有效。
所以我會經常在一個簡單的類中設定一堆值。我使用 ViewState 堅持它。為了傳遞另一個頁面,我進入 session(),并且在第一頁加載時,該類現在移動到視圖狀態(以允許和處理右鍵單擊,并打開多個頁面/瀏覽器)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/318823.html
上一篇:我的linq查詢何時回傳IEnumerable<short>物件而不是int?
下一篇:C#中的通用部分方法?
