我想知道一些事情,如果我们以正确的方式使用这样的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>
答案 0 :(得分:1)
这是不正确的,因为它违反了MVC(指的是Model-View-Controller)。
控制器的职责是链接数据库以进行查看。考虑数据库逻辑将使您的代码非常糟糕,并且难以维护,测试。
此外,您取消了ViewModel的角色
答案 1 :(得分:1)
要遵循MVC模式,您应该:
创建一个视图模型对象
category
从控制器端使用列表填充该ViewModel:
class ViewModel{
public List<Users> Users {get; set;} // whatever the name of your entity is
}
在视图顶部,指示其正在接收的对象的类型:
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
}
}
然后在视图中使用您的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);
}