我想在我的MVC-应用程序中自动计算一个值。我该去哪儿做这事?在View还是在Controller?还是两者兼有?我想要计数的值是一个带有数据类型Integer的项目。
下面是一个例子,我是如何在MS Access / VBA中做到这一点的
首先,我寻找最高的Project-Number并将其写入表中:
Dim projectNR As Long
Dim strSQL As String
projectNR = Nz(DMax("Project_Number", "dbo_Project"), 99999999) + 1
strSQL = "INSERT INTO dbo_Project (Project_Number, Pos) VALUES (" & projectNR & ", 999);"此Event以Button的形式出现在MS Access中。它打开创建表单。在这种形式中,有另一个Event
Dim RR As Long
RR = DMax("Project_Number", "dbo_Project")
Me.Project_Number = RR当用户保存新行时,临时项目号将在表中删除.这是所有用户的解决办法,因为它是Multi-User-Application in MS-Access。它工作得很好,在MS Access中没有双项目编号.
我如何在MVC中做这样的事情呢?
更新:
我的表(简单的例子):
|ID|ProjectNo|Pos|ID是PrimaryKey。ProjectNo是不可空的。Pos是不可为空的。当用户开始使用应用程序时,DB是临时的。这样的一排:
|ID|ProjectNo|Pos|
------------------
| 1|2017000 | 1|第一个用户进入创建视图。在现在看来,ProjectNo应该是自动的2017001。他可以用n个职位来挽救他的约会。保存表后,应该如下所示:
|ID|ProjectNo|Pos|
------------------
| 1|2017000 | 1|
------------------
| 2|2017001 | 1|
------------------
| 3|2017001 | 2|
------------------下一个用户得到2017002等等.
更新2:
这是我的Controller-Code (创建-获取):
[HttpGet]
public ActionResult Create(int id)
{
using (Stamm_Retoure dc = new Stamm_Retoure())
{
var v = dc.HN_Retoure_Stamm.Where(a => a.ID == id).FirstOrDefault();
return View(v);
}
}在这里,我需要查询最后一个最高的ProjectNo并对它进行计数。
在VBA中我使用DMax,请看上面.
更新3:
通过你的评论,我尝试了这样的方法:
[HttpGet]
public ActionResult Create(int id)
{
using (Stamm_Retoure dc = new Stamm_Retoure())
{
var n = dc.HN_Retoure_Stamm.OrderBy(a => a.Retoure_Nummer).ToList();
var last = n.Last();
//var retoure = new HN_Retoure_Stamm() { Retoure_Nummer = last };
var v = dc.HN_Retoure_Stamm.Where(a => a.ID == id).FirstOrDefault();
return View(v);
}
}但是,当我在Breakpoint上设置一个var last时,它就是NULL,为什么?当我取消对var retoure的注释时,就会出现一个关于= last的错误。"CS0029 C#不能将类型隐式转换为‘int’“。
更新4:
现在,我在Controller中的代码看起来:
[HttpGet]
public ActionResult Create(int id)
{
using (Stamm_Retoure dc = new Stamm_Retoure())
{
var n = dc.HN_Retoure_Stamm.OrderByDescending(a => a.Retoure_Nummer);
var last = n.ToArray().Last();
var retoure = new HN_Retoure_Stamm() { Retoure_Nummer = last };
var v = dc.HN_Retoure_Stamm.Where(a => a.ID == id).FirstOrDefault();
return View(v);
}
}但在var retoure中,最后一个在{.= red }中标记为红色->不能隐式地.为什么?
更新5:
现在,使用下面的代码,它可以工作,但最终不能工作:
[HttpGet]
public ActionResult Create(int id)
{
using (Stamm_Retoure dc = new Stamm_Retoure())
{
var n = dc.HN_Retoure_Stamm.ToList().Select(a => a.Retoure_Nummer).Last();
var last = n + 1;
var retoure = new HN_Retoure_Stamm() { Retoure_Nummer = last };
var v = dc.HN_Retoure_Stamm.Where(a => a.ID == id).FirstOrDefault();
return View(v);
}
}现在var last = n + 1; = 2017002。因为在DB中目前只有2017001。
但:
Create-View不显示/显示新值。这是Popup-View..。如何在视图上获得自动值2017002显示?
发布于 2017-09-04 08:44:01
在控制器中,您可以这样做。
变量n= dc.HN_Retoure_Stamm.OrderBy(a => a.ID).Last().ID
发布于 2017-09-04 12:35:50
好的。现在,它可以使用以下代码:
[HttpGet]
public ActionResult Create(int id)
{
using (Stamm_Retoure dc = new Stamm_Retoure())
{
var n = dc.HN_Retoure_Stamm.ToList().Select(a => a.Retoure_Nummer).Last();
var last = n + 1;
var retoure = new HN_Retoure_Stamm() { Retoure_Nummer = last };
return View(retoure);
}
}谢谢大家:)
https://stackoverflow.com/questions/46031949
复制相似问题