我对ASP.NET比较陌生,而且我对简单的网络表单有疑问。我有一个页面,我需要根据存储过程的结果重定向。我收集了userid(domain \ name),与MS SQL表进行比较以获取要显示哪个报告页面的角色(这只会带回一个角色,例如Sales),然后我想重定向到另一个aspx基于结果的页面。我有一个通用报告链接页面,其中包含管理员角色的所有报告。然后我有一些用户应该只看到的报告的销售,营销和客户服务页面。由于它填充了一个文本框和一个标签,我将该角色取回,但我无法将其重定向到备用页面。这是我的代码的副本。现在,我已经评论了" if else"重定向,因为他们没有工作。任何帮助将不胜感激。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.WebControls;
using System.Security.Principal;
using System.Data.SqlClient;
using System.Data.Sql;
using System.Configuration;
namespace MonogramFoods
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//var username = User.Identity.Name;
var username = "MSHOLDINGS\\efarney";
SqlConnection MyConnection = new SqlConnection("server=mmsmv-sql1\\sql2008;database=Express;Trusted_Connection=True;");
SqlDataAdapter MyDataAdapter = new SqlDataAdapter("SP_WEB_Check_User", MyConnection);
MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@username", SqlDbType.VarChar, 40));
MyDataAdapter.SelectCommand.Parameters["@username"].Value = (username);
MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@userrole", SqlDbType.VarChar, 40));
MyDataAdapter.SelectCommand.Parameters["@userrole"].Direction = ParameterDirection.Output;
DataSet DS = new DataSet();
MyConnection.Open();
MyDataAdapter.Fill(DS, "UsersRole");
Session.Add("Role", DS);
TextBox1.Text = MyDataAdapter.SelectCommand.Parameters[1].Value.ToString();
Label1.Text = MyDataAdapter.SelectCommand.Parameters[1].Value.ToString();
//if (TextBox1.Text == ("CustService"))
//{
// Response.Redirect("ReportsMain_CS.aspx");
//}
//else if (TextBox1.Text == ("Marketing"))
//{
// Response.Redirect("ReportsMain_MK.aspx");
//}
//else if (TextBox1.Text == ("Scorecard"))
//{
// Response.Redirect("ReportsMain_SC.aspx");
//}
//else if (TextBox1.Text == ("Sales"))
//{
// Response.Redirect("ReportsMain_SA.aspx");
//}
//else if (TextBox1.Text == ("Admin"))
//{
// Response.Redirect("ReportsMain.aspx");
//}
}
}
}
}
答案 0 :(得分:1)
从ASP.NET开发人员的角度来看,似乎有很多问题。因为你是新人,这很正常。你可能想要改变那些东西。
我认为页面加载时的重定向部分是错误的。这通常意味着您可以根据另一页中SQL结果的数据生成链接。每个回发操作都有成本。客户端需要发回整个表单,包括可能非常大的ViewState。在移动设备上,这是不可接受的,因为人们通常没有无限制的计划。
请不要使用会话存储。我的意思是。现在这被认为是一种不好的做法,因为您的应用程序将无法横向扩展。此外,在Session中放置大型数据结构是一个坏主意,因为每个用户都会在服务器上占用大量内存。您可能希望使用一个小的Http-Only cookie来存储当前用户的角色。请使用POCO对象(Plain Old CLR Objects)而不是DataAdapter。这允许序列化数据(例如,以JSON或XML格式)。
使用变量存储数据而不是永远不会显示的控件。同样,通过在另一个页面上使用生成的标记而不是回发来完全避免这种情况。
您打开SQL连接,但永远不会关闭它。这可能导致内存泄漏或非常大的连接池。同时关闭您打开的连接。您可以使用using
语句,以免忘记它。
请将这些观点视为改进的领域,而不是批评者。
祝你好运。