我想知道一些事情,如果我们使用像这样的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>
这是不正确的,因为它违反了MVC(指模型 - 视图 - 控制器)。
控制器职责是将数据库链接到视图。将数据库逻辑放入视图将使您的代码非常糟糕并且难以维护,测试。
此外,您取消了ViewModel的角色
要遵循MVC模式,您应该:
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
}
}
@model ViewModel //use full path if it's not in the same scope
@{
foreach (user in Users){
//do something
}
}
理想情况下,您还希望在控制器中执行UserExist逻辑。因此,在viewmodel上创建一个新属性,从控制器执行检查,然后将数据插入ViewModel对象,并将其传递给View。
它不正确,不推荐
与后端相关的代码应写入控制器(也是Microsoft推荐的)
写入控制器中的代码然后按模型传递结果进行查看
您应该将视图数据注入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);
}