C# 为不同的用户类型创建不同的布局

C# 为不同的用户类型创建不同的布局,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,作为背景,我目前正在创建一个学生数据库。我正在处理它的登录页面部分。现在,我可以通过下拉列表显示不同的用户类型,并让用户输入用户名和密码。我能够使用正确的凭据成功登录用户,并将他们重定向到_ViewStart.csthml下的默认布局。我的问题是,我不完全确定如何将它们重定向到不同的页面。在下面的代码中,我想检查用户选择的用户类型,并为每个用户类型创建单独的布局 using System; using System.Collections.Generic; using System.Linq;

作为背景,我目前正在创建一个学生数据库。我正在处理它的登录页面部分。现在,我可以通过下拉列表显示不同的用户类型,并让用户输入用户名和密码。我能够使用正确的凭据成功登录用户,并将他们重定向到_ViewStart.csthml下的默认布局。我的问题是,我不完全确定如何将它们重定向到不同的页面。在下面的代码中,我想检查用户选择的用户类型,并为每个用户类型创建单独的布局

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 LoginQuery
{
    public partial class Login : System.Web.UI.Page
    {
        SqlCommand cmd = new SqlCommand();
        SqlConnection con = new SqlConnection();
        SqlDataAdapter sda = new SqlDataAdapter();
        DataSet ds = new DataSet();
        protected void Page_Load(object sender, EventArgs e)
        {
            con.ConnectionString = "Data Source=CHRIS\\SQLEXPRESS;Initial Catalog=FPSDD;Integrated Security=True";
            con.Open();
        }

        protected void BtnLogin_Click(object sender, EventArgs e)
        {
            cmd.CommandText = "SELECT PersonType FROM Person where Username='" + txtUsername.Text + "' and Password='" + txtPassword.Text + "' and PersonType='" + userType.SelectedValue + "'";
            cmd.Connection = con;
            sda.SelectCommand = cmd;
            sda.Fill(ds, "Person");
            if (ds.Tables[0].Rows.Count > 0)
            {
                if (userType.SelectedValue == "Student")
                {
                    Response.Redirect("");
                }
                else if (userType.SelectedValue == "Instructor")
                {
                    Response.Redirect("");
                }
                else if (userType.SelectedValue == "Counselor")
                {
                    Response.Redirect("");
                }
                else if (userType.SelectedValue == "Parent")
                {
                    Response.Redirect("");
                }
                else if (userType.SelectedValue == "Principal")
                {
                    Response.Redirect("");
                }
                else if (userType.SelectedValue == "Admin")
                {
                    Response.Redirect("");
                }
                else if (userType.SelectedValue == "Counselor")
                {
                    Response.Redirect("");
                }
                else if (userType.SelectedValue == "Instructor")
                {
                    Response.Redirect("");
                }
                else if (userType.SelectedValue == "Counselor")
                {
                    Response.Redirect("");
                }
                else
                {
                    cmd.CommandText = "SELECT PersonType FROM Person where Username='" + txtUsername.Text + "' and Password='" + txtPassword.Text + "'";
                    cmd.Connection = con;
                    sda.SelectCommand = cmd;
                    sda.Fill(ds, "Person");

                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        Label1.Text = "Invalid User Type. Please Try Again!";
                    }
                    else
                    {
                        Label1.Text = "Invalid User Type, Username or Password. Please Try Again!";
                    }
                }
            }
        }
        protected void UserType_SelectedIndexChanged(object sender, EventArgs e)
        {
            ImageDef.ImageUrl = "Images/student.png";
            {
                if (userType.SelectedValue == "Student")
                {
                    ImageDef.ImageUrl = "Images/student.png";
                }
                else if (userType.SelectedValue == "Teacher")
                {
                    ImageDef.ImageUrl = "Images/teacher.png";
                }
                else if (userType.SelectedValue == "Counselor")
                {
                    ImageDef.ImageUrl = "Images/counselor.png";
                }
                else if (userType.SelectedValue == "Parent")
                {
                    ImageDef.ImageUrl = "Images/parent.png";
                }
                else if (userType.SelectedValue == "Principal")
                {
                    ImageDef.ImageUrl = "Images/principal.png";
                }
                else if (userType.SelectedValue == "Admin")
                {
                    ImageDef.ImageUrl = "Images/admin.png";
                }
                else
                {
                    ImageDef.ImageUrl = "Images/student.png";
                }
            }
        }
    }
}
在_ViewStart.cshtml下,我使用Views文件夹根目录中的_ViewStart文件控制布局渲染

@{
    var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();
    string cLayout = "";
    if (controller == "UsersController")
    {
        cLayout = "~/Views/Shared/_Students.cshtml";
        cLayout = "~/Views/Shared/_Parents.cshtml";
        cLayout = "~/Views/Shared/_Principal.cshtml";
        cLayout = "~/Views/Shared/_Instructor.cshtml";
        cLayout = "~/Views/Shared/_Counselors.cshtml";
        cLayout = "~/Views/Shared/_Layout.cshtml";
    }
    else if (controller == "")
    {
        Layout = "~/Views/Shared/_Dashboard.cshtml";
    }
    Layout = cLayout;
}

任何关于如何将不同用户类型重定向到不同页面的建议都将不胜感激

您可以直接在视图中定义布局

示例:

在UsersController/Index.cshtml文件的顶部(仅适用于此视图)

和在_ViewStart.cshtml中(默认)


无需传递文件的完整路径,项目将自动在共享文件夹中搜索

我认为您为不同的用户创建了不同的布局,并且具有不同的用户视图。因此,为不同的用户添加单独的布局非常容易。 当用户登录到您的系统时,他们将获得不同的查看页面。 可以直接在视图顶部定义用户的相应布局

例如,在“学生”视图的顶部添加以下代码

@{
    Layout =  "~/Views/Shared/_Students.cshtml";
}
同样,“家长”的观点将是:

@{
    Layout =  "~/Views/Shared/_Parents.cshtml";
}

为不同用户的每个查看页面执行此操作。您将获得更好的结果。

您的连接处理完全错误。您应该尽可能晚地创建和打开连接,并尽快将其关闭。SqlConnection实现。使用它的最好方法是将它放在using语句中。
@{
    Layout =  "~/Views/Shared/_Students.cshtml";
}
@{
    Layout =  "~/Views/Shared/_Parents.cshtml";
}