在View Asp.Net MVC中访问数据库实体

时间:2019-04-18 09:39:24

标签: c# asp.net-mvc model-view-controller

我想知道一些事情,如果我们以正确的方式使用这样的DBEntities呢?意味着我们项目中是否存在安全问题?任何建议或建议。

查看

@using proName.Models
@{
        proNameEntities DB = new proNameEntities();
}

<div class"">
@{
   int conID;
   var UserExist = DB.Users.Where(x => x.UserID =conID).FirstOrDefault();

   if (UserExist != null)
   {
    <p>@UserExist.name</p>
   }

 }
</div>

4 个答案:

答案 0 :(得分:1)

这是不正确的,因为它违反了MVC(指的是Model-View-Controller)。

控制器的职责是链接数据库以进行查看。考虑数据库逻辑将使您的代码非常糟糕,并且难以维护,测试。

此外,您取消了ViewModel的角色

答案 1 :(得分:1)

要遵循MVC模式,您应该:

  1. 创建一个视图模型对象

    category
  2. 从控制器端使用列表填充该ViewModel:

    class ViewModel{
        public List<Users> Users {get; set;} // whatever the name of your entity is
    }
    
  3. 在视图顶部,指示其正在接收的对象的类型:

    public class HomeController : Controller {
    
        proNameEntities DB = new proNameEntities();   //initalise db entities here        
    
        public ActionResult Index(){
            ViewModel vm = new ViewModel();
            vm.Users = this.DB.Users
            return View(vm); // pass the viewmodel object to the view
        }
    }
    
  4. 然后在视图中使用您的viewmodels列表:

    @model ViewModel //use full path if it's not in the same scope
    

理想情况下,您还希望在控制器内执行UserExist逻辑。因此,请在viewmodel上创建一个新属性,从控制器执行检查,然后将数据插入到ViewModel对象中,然后将其传递给View。

答案 2 :(得分:1)

它不正确,不建议

与后端相关的代码应写在控制器中(Microsoft也推荐)

在控制器中编写代码,然后按模型将结果传递给视图

答案 3 :(得分:0)

您应该将视图数据注入Action中,而不是将您的业务/数据库代码放入View(M V C)中。像下面的代码:

public ActionResult Index()
{
    var conID = 1; //BASED ON DATA-INPUT
    var userExists = DB.Users.Where(x => x.UserID = conID).FirstOrDefault();
    return View(userExists?.Name);
}