在MVC视图层从DATASET中提取数据

2024-04-10

我被告知在 MVC 中使用旧的传统 SQL 方式,因此创建了登录注册页面,但现在的问题是我无法从数据集中将数据返回到 VIEW。

Model:

public ConnectionStatus Login_db(String email, String pwd, String conStr)
        {
            String hashedpwd_login = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "SHA1");
            using (SqlConnection sqlCon = new SqlConnection(conStr))
            {
                using (SqlCommand sqlCom = new SqlCommand())
                {
                    sqlCom.Connection = sqlCon;
                    sqlCom.CommandText = "select Count(*) from tblRegister where userEmail=@email AND userPwd=@pwd";
                    sqlCom.Parameters.AddWithValue("@email", email);
                    sqlCom.Parameters.AddWithValue("@pwd", hashedpwd_login);
                    String select_com = "select * from tblRegister";
                    SqlCommand sqlCom2 = new SqlCommand(select_com, sqlCon);
                    ConnectionStatus connectStatus = new ConnectionStatus();
                    int no_rows_affected;
                    SqlDataAdapter sda = new SqlDataAdapter(select_com, sqlCon);
                    DataSet data_tb = new DataSet();

                    try
                    {
                        sqlCon.Open();
                        no_rows_affected = Convert.ToInt32(sqlCom.ExecuteScalar());
                        if (no_rows_affected == 1)
                        {
                            connectStatus.Message = "User logged in successfully, " + no_rows_affected;
                            sda.Fill(data_tb, "tblRegister");
                            tableCreation tb_creation = new tableCreation();
                            tb_creation.CreateTable = data_tb;
                        }
                        else 
                        {
                            connectStatus.Message = "Invalid email/password combination.";
                        }


                    }
                    catch (Exception ex)
                    {
                        connectStatus.Message = ex.Message;
                    }
                    return connectStatus;

                }

控制器

 public ActionResult loginResult(String command, FormCollection formData) 
        {
            if (command == "Login")
            {
                var email = formData["txtboxEmail"];
                var pwd = formData["txtboxPassword"];
           //     String conStr = "Data Source=HUNAIN-PC;Initial Catalog=registration;User ID=sa;Password=abc123!@#";
                database model_db = new database();
                var db_status = model_db.Login_db(email, pwd, conStr);
                ViewBag.Message = db_status.Message;


            }
            tableCreation retTable = new tableCreation();
            ViewData["DataTable"] = retTable.CreateTable;
            return View(retTable.CreateTable);
        }

View:

@{
    ViewBag.Title = "Login Authentication";

}

@model System.Data.DataSet

<h4>@ViewBag.Message</h4>


@foreach (var row in Model.Tables["tblRegister"].Rows)
{    
    @(row["userID"] + " " + row["userName"])
}  

请注意,我创建了 tableCreation 类等来传递数据集对象,以便我可以在控制器中创建它的对象。


您不应在 ASP.NET MVC 中使用 DataSet 和 SqlDataAdapter。你应该使用模型来代替。

所以让我尝试重写你的代码。首先定义代表您的实体的模型:

public class User
{
    public int Id { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
}

你也可以有一个ConnectionStatus model:

公共类连接状态 { 公共 T 结果 { 得到;放; } 公共字符串消息{获取;放 } }

然后您的数据层可能包含两种方法(一种用于验证凭据,另一种用于获取用户列表):

public static class Db
{
    public static ConnectionStatus<bool> Login(string email, string password, string connectionString)
    {
        string hasedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(password, "SHA1");
        using (SqlConnection sqlCon = new SqlConnection(connectionString))
        using (SqlCommand sqlCom = sqlCon.CreateCommand())
        {
            sqlConn.Open();
            sqlCom.CommandText = "SELECT count(*) FROM tblRegister WHERE userEmail=@email AND userPwd=@pwd";
            sqlCom.Parameters.AddWithValue("@email", email);
            sqlCom.Parameters.AddWithValue("@pwd", hasedPassword);

            var status = new ConnectionStatus<bool>();
            status.Result = false;
            try
            {
                int rowsFound = Convert.ToInt32(sqlCom.ExecuteScalar());
                if (rowsFound == 1)
                {
                    status.Result = true;
                    status.Message = "User logged in successfully, " + rowsFound;
                }
                else
                {
                    status.Message = "Invalid email/password combination.";
                }
            }
            catch (Exception ex)
            {
                status.Message = ex.Message;
            }

            return status;
        }
    }

    public static ConnectionStatus<IList<User>> GetUsers()
    {
        using (SqlConnection sqlCon = new SqlConnection(connectionString))
        using (SqlCommand sqlCom = sqlCon.CreateCommand())
        {
            sqlConn.Open();
            sqlCom.CommandText = "SELECT userID, userName FROM tblRegister";

            var status = new ConnectionStatus<IList<User>>();
            status.Result = new List<User>();

            try
            {
                using (var reader = sqlCom.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var user = new User();
                        user.Id = reader.GetInt32(reader.GetOrdinal("userID"));
                        user.Email = reader.GetString(reader.GetOrdinal("userName"));
                        status.Result.Add(user);  
                    }
                }
            }
            catch (Exception ex)
            {
                status.Message = ex.Message;
            }

            return status;
        }
    }
}

然后定义一个视图模型:

public class LoginViewModel
{
    public string Command { get; set; }
    public string TxtboxEmail { get; set; }
    public string TxtboxPassword { get; set; }
}

您的控制器操作将作为参数:

public ActionResult LoginResult(LoginViewModel model) 
{
    if (model.Command == "Login")
    {
        string conStr = "Data Source=HUNAIN-PC;Initial Catalog=registration;User ID=sa;Password=abc123!@#";
        var loginStatus = Db.Login(model.TxtboxEmail, model.TxtboxPassword, conStr);
        ViewBag.Message = loginStatus.Message;
    }

    var usersStatus = Db.GetUsers(conStr);
    return View(usersStatus.Result);
}

最后在你的强类型视图中:

@model IList<User>
@{
    ViewBag.Title = "Login Authentication";
}

<h4>@ViewBag.Message</h4>

<table>
    @foreach (var user in Model)
    {
        <tr>
            <td>@user.Id</td>
            <td>@user.Email</td>
        </tr>
    }
</table>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在MVC视图层从DATASET中提取数据 的相关文章

随机推荐

  • 如何垂直分割250k列的文件?

    我需要根据大小 首选 或列数将 250k 的文件拆分为几个 5 块 我知道split命令用于按行拆分 但不知道是否有类似的函数用于按列拆分 我的文件中的列数不均匀 因此块不能具有相同的列数 Input AA BB CC DD EE FF G
  • Groupby 过滤器,基于连续序列排序以及 ID 和日期列

    我有一个数据框 如下所示 ID Status Date 0 1 F 2017 06 22 1 1 M 2017 07 22 2 1 P 2017 10 22 3 1 F 2018 06 22 4 1 P 2018 08 22 5 1 F 2
  • jar 名称中的版本

    当我将 maven 项目导入 Intellij 时 它生成的 jar 文件不包含版本 但是maven生成的jar有name version jar格式 所以我最终得到了两个 jar 文件 一个有版本 另一个没有版本 我当然可以在 Intel
  • Javascript:关闭字符串中打开的 HTML 标签

    我有一个包含 HTML 代码的 JavaScript 字符串 我显示它 并根据字数附加了一个阅读更多 更少切换器 问题是 当我缩小 HTML 代码时 它可能有开放标签 假设 p A computer is a general purpose
  • 使用 MySQL 实现物化视图(汇总表)的首选方法

    我正在工作中开发一个项目 我需要为其创建和维护汇总表出于性能原因 我相信正确的术语是物化视图 我这样做有两个主要原因 非规范化 我尽可能地规范化表格 因此 在某些情况下 我必须连接许多表才能提取数据 我们使用 MySQL Cluster 它
  • 如何使用swift在表格视图中实现图像的延迟加载

    我想使用 swift 对我的表视图使用延迟加载概念 在我的表格视图中 我显示了多个包含产品图像和产品名称的单元格 请帮助我找到解决方案 旧的解决方案 因为你没有显示任何代码 这是给您的示例 func tableView tableView
  • 如何在运行时创建 celery 队列,以便工作人员拾取发送到该队列的任务?

    我正在使用 django 1 4 celery 3 0 rabbitmq 为了描述该问题 我的系统中有许多内容网络 并且我需要一个队列来处理与每个网络相关的任务 然而 内容是在系统运行时动态创建的 因此我需要动态创建队列并让现有工作人员开始
  • CSS 变量中的 CSS calc() 行为

    我对使用 calc 设置 CSS 变量的行为感到好奇 Example test halfWidth calc 100 2 现在 如果 test元素 比如说div 宽 500px 我想要 halfWidth变量设置为 250px 但是 据我所
  • 急切地处置 ManualResetEvent

    我有一个类 它允许其他线程等待 直到它使用 a 完成操作ManualResetEventSlim 操作通常很简短 这个类没有明确的生命周期 因此没有一个地方可以轻松关闭该事件 相反 我想在事件完成后立即关闭该事件 一旦收到信号 并且在任何等
  • 在 Android 中滚动 listView 时选定的列表项颜色会移动

    在我的 Android 应用程序中 我使用列表视图 列表视图的代码如下
  • 在Python中将文本输出到多个终端

    我使用Python和ArchLinux 我正在用 Python 编写一个简单的人工智能作为学校项目 因为这是一个学校项目 并且我想清楚地演示它在做什么 所以我的目的是有一个不同的终端窗口来显示每个子进程的打印输出 一个终端显示句子如何被解析
  • 将画布设置为背景 - Javascript [重复]

    这个问题在这里已经有答案了 我试图弄清楚如何将我创建的画布转换为 HTML 正文的背景图像 谢谢
  • 如何使用样条线绘制 Cox 风险模型

    我有以下模型 coxph Surv fulength mortality 1 pspline predictor 其中 fulength 是随访时间 包括死亡率 predictor 是死亡率的预测因子 上面命令的输出是这样的 coef se
  • R 直方图中的确切箱数

    我在 R 中制作直方图时遇到困难 问题是我告诉它制作 5 个容器 但它制作了 4 个 我告诉它制作 5 个 它制作了 8 个 data lt c 5 28 14 64 37 25 78 9 44 92 8 96 19 22 34 81 33
  • Excel:列出 2 个数字之间的数字

    我想知道是否有人知道列出 2 个值之间的所有数字的公式 例如 如果单元格 F2 中有 12 而 G2 中有 17 我想要一个显示 13 14 15 16 的公式在单元格 H2 中 Thanks 使用 Excel 工作表函数无法完成此操作 为
  • SQL Server 2000 相当于 ON DUPLICATE KEY?

    SQL Server 2000 是否有与 MySQL ON DUPLICATE KEY 子句等效的功能 这个答案 https stackoverflow com questions 1197733 does sql server offer
  • CoreData 获取关系计数和按另一个关系分组的请求 (m2n)

    在我的 CoreData 模型中 我有一个使用中间实体建模的 n2n 关系 Person 1 lt Person2Appointment gt 1 Appointment The Person2Appointment实体看起来像这样 int
  • 如何使用 AJAX 渲染部分内容?拉拉维尔 5.2

    我现在的情况是想列出有关存储在 MYSQL 数据库中的停车位的信息 我正在使用 AJAX 调用 API 端点 api spots 并返回景点列表 我使用刀片语法创建了一个部分视图来布局信息 partials Spot blade php 我
  • EPPlus 阅读列标题

    有没有一种简单的方法可以告诉 EPPlus 一行是标题 或者我应该通过使用 SelectedRange 指定范围来创建标题 将其从工作表中删除并迭代保留的单元格 我最终这样做了 class Program static void Main
  • 在MVC视图层从DATASET中提取数据

    我被告知在 MVC 中使用旧的传统 SQL 方式 因此创建了登录注册页面 但现在的问题是我无法从数据集中将数据返回到 VIEW Model public ConnectionStatus Login db String email Stri