2013-01-17 45 views
0

这应该是一个非常简单的问题,因为我是一个noob,几乎已经找到了自己。我正在对数据库中的信息进行身份验证,我只想将该行的数据显示到视图中。我真的不确定如何在控制器中创建一个具有行数据的变量,并将该变量调用到视图中,以便我可以在屏幕上看到行信息。MVC将行数据显示到视图

谢谢大家,希望能尽快好起来!

我的模型:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; 
namespace Mybasicvalidator.Models 
{ 
public class Class1 
    { 
    [Required] 
    public int id { get; set; } 
    public string fname {get; set;} 
    public string lname { get; set; } 
    public string email { get; set; } 
    public string username { get; set; } 
    public string password { get; set; } 
    } 
} 

我的控制器:

using Mybasicvalidator.Models; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Security; 
namespace Mybasicvalidator.Controllers 
{ 
public class homeController : Controller 
{ 
    // 
    // GET: /home/ 
    [HttpGet] 
    public ActionResult Index() 
    { 
     return View(); 
     return Content("Login Page"); 
    } 
    [HttpPost] 
    public ActionResult Index(Class1 modelle) 
    { 
     if (ModelState.IsValid) 
     { 
      if (DataAccess.DAL.CheckUser(modelle.fname)) 

      { 
      return RedirectToAction("Index", "profile"); 
      } 

      { 
       return Content("FAIL"); 
      } 
     } 
     return View(); 
    } 
} 
} 

我的数据访问层(DAL):

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Web; 


namespace Mybasicvalidator.DataAccess 
{ 
    public class DAL 
    { 
    static SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString()); 

    public static bool CheckUser(string fname) 
    { 
     bool authenticated = false; 

     string query = string.Format("SELECT * FROM [tbl_user] WHERE fname = '{0}'", fname); 

     SqlCommand cmd = new SqlCommand(query, conn); 
     conn.Open(); 
     SqlDataReader sdr = cmd.ExecuteReader(); 
     authenticated = sdr.HasRows; 

      conn.Close(); 
     return (authenticated); 
    } 

} 
} 

所以我知道这是阅读的行和检查对我的行进行身份验证,那么如何将数据行带入视图?我对此很新,并且已经尝试了一个星期来完成它,所以我希望能够遵循一些代码。

再次感谢

+0

不太清楚你想要什么。你问如何从数据库中提取特定数据? – Botonomous

+0

@Anon我可以提取数据,我只想查看数据(数据库行) – Batsu

回答

0

您正在离开ViewModel。

在MVC应用程序:

  • 控制器选择正确的视图,构建视图模型,然后将其传递给视图。
  • 视图模型包含视图将显示的信息/数据。
  • 该视图包含实际显示来自ViewModel的数据的标记。

控制器:

[HttpGet] 
public ActionResult Index(int userId) 
{ 
    return View(new UserViewModel(userId)); 
} 

视图模型:

public class UserViewModel { 
    public UserViewModel(int userId) { 
     UserToDisplay = UserRepository.GetUserById(userId); 
    } 

    public User UserToDisplay { get; set; } 
} 

查看:

@model UserViewModel; 

Hello @model.UserToDisplay.FirstName! 
+0

Hi Heather,我将'View Model'代码放在Model文件夹的Class1.cs文件中,但是'UserRepository'doesn在当前的情况下不存在。 'User':( – Batsu

+0

“UserRepository”和“User”是用于这个例子的虚拟类,用你正在使用的任何仓库以及你想要显示的任何类来替换它们。 – Heather

0

你可以有你的DAL方法返回模型:

public class DAL 
{ 
    public static Class1 GetUser(string fname) 
    { 
     var connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString(); 
     using (var conn = new SqlConnection(connectionString)) 
     using (var cmd = conn.CreateCommand()) 
     { 
      conn.Open(); 
      cmd.CommandText = "SELECT * FROM [tbl_user] WHERE fname = @fname"; 
      cmd.Parameters.AddWithValue("@fname", fname); 
      using (var reader = cmd.ExecuteReader()) 
      { 
       if (!reader.Read()) 
       { 
        return null; 
       } 

       var user = new Class1(); 
       user.id = reader.ReadInt32(reader.GetOrdinal("id")); 
       user.fname = reader.ReadString(reader.GetOrdinal("fname")); 
       ... and so on for the other properties 
       return user; 
      } 
     } 
    } 
} 

请注意,我如何使用参数化查询来避免代码易受攻击的SQL注入。

然后被执行认证控制器动作,你可以发出一个窗体身份验证cookie,如果重定向之前成功:

[HttpPost] 
public ActionResult Index(Class1 modelle) 
{ 
    if (ModelState.IsValid) 
    { 
     var user = DataAccess.DAL.GetUser(modelle.fname); 
     if (user != null) 
     { 
      FormsAuthentication.SetAuthCookie(modelle.fname, false); 
      return RedirectToAction("Index", "profile"); 
     } 
     return Content("FAIL"); 
    } 
    return View(modelle); 
} 

,并在你的目标控制器动作,现在可以用[Authorize]装饰属性作为唯一的身份验证最后

public class ProfileController: Controller 
{ 
    [Authorize] 
    public ActionResult Index() 
    { 
     var user = DataAccess.DAL.GetUser(User.Identity.Name); 
     return View(user); 
    } 
} 

在相应视图:用户可以访问它

@model Class1 
<div> 
    Hello @Html.DisplayFor(x => x.fname) 
</div> 
相关问题