1

我正在使用以下内容将当前用户名存储在一个变量中,该变量传递给我的存储过程,然后传递给我的数据库。这是通过单击按钮启动的。

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

使用以下命令发送变量:

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

我在 Web Developer 2008 Express 中创建了一个 Web 表单,当我在 Web Developer 中显示浏览器时,我得到了想要的结果。当我从运行在 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();

            }



        }


    }
}
4

1 回答 1

1

我认为用户在从另一台计算机上的浏览器访问页面时通过身份验证,但在从服务器访问时已通过身份验证。您可以通过像这样设置用户名来确定这一点:

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

如果我是正确的,那么您需要仔细检查您的身份验证程序(web.config 等)。如果您有任何问题,请立即告诉我。

于 2013-02-22T16:29:08.383 回答