2013-02-22 24 views
1

我正在使用以下命令將當前用戶名存儲在傳遞到我的存儲過程然後傳遞到我的數據庫的變量中。這是通過點擊按鈕啓動的。用戶名未到達數據庫

string UserName = Page.User.Identity.Name.ToString(); 

變量與此命令發送:

cmd.Parameters.AddWithValue("@UserName", UserName); 

我已經創建了Web Developer 2008速成網絡的形式,當我顯示Web開發瀏覽器我得到想要的結果。當我從我在Mac上運行的本機瀏覽器(Firefox)運行網頁時,我什麼都沒有。 Web Developer正在Windows 2008 Server安裝上運行。我需要爲Mac做些不同的事情嗎?我將擁有大多數使用Mac而不是Windows的用戶。

下面是從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; 
using System.Data.SqlClient; 



namespace WebApplication1 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
     { 

     } 

     protected void MasterData_Selecting(object sender, SqlDataSourceSelectingEventArgs e) 
     { 

     } 

     protected void btnUpdate_Click(object sender, EventArgs e) 
     { 

      using (SqlConnection con = new SqlConnection("server=(local);database=InvoiceSHC;Trusted_Connection=Yes")) 
      { 

       // Get the UserId of the logged in user 

       string UserName = HttpContext.Current.User.Identity.Name.ToString(); 
       string Timestamp = DateTime.Now.ToString(); 
       //Not sure why you need a SqlDataAdapter unused here. 
       //SqlDataAdapter DA = new SqlDataAdapter("UpdateSHCInvoice", con); 
       SqlCommand cmd = new SqlCommand("UpdateSHCInvoice", con); 
       cmd.CommandType = CommandType.StoredProcedure; 

       cmd.Parameters.AddWithValue("@Ref", dlRef.SelectedItem.Value); 
       cmd.Parameters.AddWithValue("@PhaseName", dlPhase.SelectedItem.Value); 
       cmd.Parameters.AddWithValue("@PageType", dlPageType.SelectedItem.Value); 
       cmd.Parameters.AddWithValue("@Page", tbPage.Text); 
       cmd.Parameters.AddWithValue("@Percent", dlPercent.SelectedItem.Value); 
       cmd.Parameters.AddWithValue("@ChngType", dlChngType.SelectedItem.Value); 
       cmd.Parameters.AddWithValue("@UserName", UserName); 
       cmd.Parameters.AddWithValue("@Timestamp",Timestamp); 
       con.Open(); 
       cmd.ExecuteNonQuery(); 

       GridView1.DataBind(); 

      } 



     } 


    } 
} 
+0

他們是以神奇的方式登錄,還是你有任何真正的登錄程序,確保'Page.User'的價值是有道理的? – 2013-02-22 15:02:49

+0

是否正在輸入數據庫中的其他值,並且您能向我們展示整個數據庫連接如何執行? – coder 2013-02-22 15:04:25

+0

由於評論區域有限,我編輯了原文。 – 2013-02-22 15:34:34

回答

1

我在想,用戶從另一臺計算機上的瀏覽器訪問頁面時驗證的代碼,但訪問時,認證從服務器。您可以通過設置用戶名這樣的檢查肯定這一點:

string UserName = ""; 
if(HttpContext.Current.User.Identity.IsAuthenticated) 
{ 
    UserName = HttpContext.Current.User.Identity.Name.ToString(); 
} 
else 
{ 
    UserName = "UnauthenticatedUser"; 
} 

如果我是正確的,那麼你就需要仔細檢查您的驗證程序(web.config文件等)。如果您有任何問題,請現在讓我。

+0

jadarnel27 - 我用你的代碼運行它,當在web開發中運行時,我收到了正確的結果。在Firefox中運行時,我收到了UnauthenticatedUser。此認證過程是否應該移至頁面加載事件而不是按鈕點擊?從邏輯的角度來看,一旦他們把頁面上來,他們從用戶ID的角度來看。 – 2013-02-22 17:18:17

+0

@TimVavra很好,這很有道理。你使用什麼類型的認證?在你的web.config中,查看「''」和「''」 - 在「mode」旁邊說什麼? – jadarnel27 2013-02-22 17:22:49

+0

它說。它上面的代碼有一個<! - 這是我的HML編碼技能幾乎不存在,但我認爲始終存在前體/後繼關係。 – 2013-02-22 18:58:35