C# MVC4最佳实践数据库模型v视图模型(传递到视图)
我想从一开始就养成好习惯,所以我有一个问题: 我一直在做以下工作,一直在工作,然后我读了这篇文章 以下是我一直在做的事情: 控制器C# MVC4最佳实践数据库模型v视图模型(传递到视图),c#,entity-framework,asp.net-mvc-4,C#,Entity Framework,Asp.net Mvc 4,我想从一开始就养成好习惯,所以我有一个问题: 我一直在做以下工作,一直在工作,然后我读了这篇文章 以下是我一直在做的事情: 控制器 public ActionResult OneDollar130(Int32 number) { MyEDM db = new MyEDM(); MyDBModel model = db.MyTable.Where(t => t.Current == 1 && t.No == number).First(); retu
public ActionResult OneDollar130(Int32 number)
{
MyEDM db = new MyEDM();
MyDBModel model = db.MyTable.Where(t => t.Current == 1 && t.No == number).First();
return View(model);
}
public ActionResult OneDollar112(Int32 TableNo)
{
return View(new getOneDollar112Game(TableNo));
}
看法
模型
看法
@model MyProject.Models.getMyModel
@如果(Model.fldNo1==“”)
{
@ActionLink(“1”,“Number1”,“Number”,新的{model=model,Number=1},null)
}
其他的
{
@ActionLink(“1”,“Number2”,“Number”,新的{model=model,Number=1})
}
好的,我的两个问题是:
e、 g:CS1061:“MyProject.Models.getMyModel”不包含“fldNo1”的定义,并且找不到接受“MyProject.Models.getMyModel”类型的第一个参数的扩展方法“fldNo1”(是否缺少using指令或程序集引用?我也不喜欢将数据库对象用作模型 我所做的是在我的项目中依赖MVC结构
视图
-包含视图
模型
-包含专用于视图的模型
控制器
-包含控制器,还负责在数据库和视图模型之间进行转换
在我的控制器中,我添加了与数据库通信的存储库(请参阅)。如果我想在我的视图中显示一个用户,我会得到这样的结果
public ActionResult Show()
{
// entity model
var user = _userRepository.GetUserByName(User.Identity.Name);
// translate to view model
var model = new User
{
Name = user.Name,
EmailAddress = user.EmailAddress
}
// Send the view model to the view
return View(model);
}
这有用吗?1)我编辑了你的代码
行动:
public ActionResult OneDollar112(Int32 tableNo)
{
return View(new OneDollar112ViewModel(tableNo));
}
型号:
public class OneDollar112ViewModel
{
private static MyEDM db = new MyEDM();
private MyDBModel myModel;
public string fldNo1
{
get
{
return myModel == null
? myModel.fldNo1
: null;
}
set
{
// Your set logic here
}
}
public OneDollar112ViewModel(Int32 number)
{
myModel = db.MyTable
.Where(t => t.Current == 1 && t.No == numbner).SingleOrDefault();
}
}
视图:
@model MyProject.Models.OneDollar112ViewModel
@如果(Model.fldNo1==“”)
{
@ActionLink(“1”,“Number1”,“Number”,新的{model=model,Number=1},null)
}
其他的
{
@ActionLink(“1”,“Number2”,“Number”,新的{model=model,Number=1})
}
2) 您应该使用视图模型将业务逻辑与数据层分离,您可以将数据层封装在服务中,并在将来利用依赖项注入 至少出于两个原因,您应该有单独的模型和视图模型: 1.安全 MVC中的默认模型绑定器将使用任何匹配的post数据字段绑定到模型属性。这提供了一个安全整体,如果您的属性不打算更新,但在模型中(例如,使用通常不显示的属性名称伪造回发),则可以利用该安全整体进行攻击 通过使用ViewModel并将每个必需属性从ViewModel显式传递到实际模型,您可以抵御此攻击向量 2.复杂性 大多数合理的应用程序都需要每个视图有大量的模型和模型集合 e、 g.基本的CRM客户视图可能有:客户详细信息,但不是分数、名称和电话号码列表、最近交易的摘要列表、注册产品列表等。这些可能存在于复杂的对象集合中,名称和电话号码在不同的模型中,最近的交易可能是订单号,订单行总数,仅前三个SKU代码等 ViewModel允许您仅从模型和静态数据缓存中构建显示所需的部分和摘要。结果应该简化构建视图的工作流,并使其更易于测试
从简单的ViewModels到实际使用的最终复杂的ViewModel通常有一条继承路径不确定为什么您认为代码应该毫无问题地运行。我看不到
fdlNo1
的任何定义。
public ActionResult Show()
{
// entity model
var user = _userRepository.GetUserByName(User.Identity.Name);
// translate to view model
var model = new User
{
Name = user.Name,
EmailAddress = user.EmailAddress
}
// Send the view model to the view
return View(model);
}
public ActionResult OneDollar112(Int32 tableNo)
{
return View(new OneDollar112ViewModel(tableNo));
}
public class OneDollar112ViewModel
{
private static MyEDM db = new MyEDM();
private MyDBModel myModel;
public string fldNo1
{
get
{
return myModel == null
? myModel.fldNo1
: null;
}
set
{
// Your set logic here
}
}
public OneDollar112ViewModel(Int32 number)
{
myModel = db.MyTable
.Where(t => t.Current == 1 && t.No == numbner).SingleOrDefault();
}
}
@model MyProject.Models.OneDollar112ViewModel
<table>
<tr>
@if (Model.fldNo1 == "")
{
<td class="numberTD">
@Html.ActionLink("1", "Number1", "Number", new { model = Model, number = 1 }, null)
</td>
}
else
{
<td class="numberTD2">
@Html.ActionLink("1", "Number2", "Number", new { model = Model, number = 1 })
</td>
}
</tr>
</table>