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

问题描述 投票:0回答:4

我想知道一些事情,如果我们使用像这样的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>
c# asp.net-mvc model-view-controller
4个回答
1
投票

这是不正确的,因为它违反了MVC(指模型 - 视图 - 控制器)。

控制器职责是将数据库链接到视图。将数据库逻辑放入视图将使您的代码非常糟糕并且难以维护,测试。

此外,您取消了ViewModel的角色


1
投票

要遵循MVC模式,您应该:

  1. 创建一个viewmodel对象 class ViewModel{ public List<Users> Users {get; set;} // whatever the name of your entity is }
  2. 使用控制器端的列表填充ViewModel: 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 } }
  3. 在视图的顶部,指示它接收的对象类型: @model ViewModel //use full path if it's not in the same scope
  4. 然后在视图中使用viewmodels列表: @{ foreach (user in Users){ //do something } }

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


1
投票

它不正确,不推荐

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

写入控制器中的代码然后按模型传递结果进行查看


0
投票

您应该将视图数据注入Action,而不是将业务/数据库代码放入View(MVC)。如下代码:

public ActionResult Index()
{
    var conID = 1; //BASED ON DATA-INPUT
    var userExists = DB.Users.Where(x => x.UserID = conID).FirstOrDefault();
    return View(userExists?.Name);
}
© www.soinside.com 2019 - 2024. All rights reserved.