首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# MVC -自动计数/计数值

C# MVC -自动计数/计数值
EN

Stack Overflow用户
提问于 2017-09-04 07:08:31
回答 2查看 244关注 0票数 1

我想在我的MVC-应用程序中自动计算一个值。我该去哪儿做这事?在View还是在Controller?还是两者兼有?我想要计数的值是一个带有数据类型Integer的项目。

下面是一个例子,我是如何在MS Access / VBA中做到这一点的

首先,我寻找最高的Project-Number并将其写入表中:

代码语言:javascript
复制
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);"

EventButton的形式出现在MS Access中。它打开创建表单。在这种形式中,有另一个Event

代码语言:javascript
复制
Dim RR As Long
RR = DMax("Project_Number", "dbo_Project")
Me.Project_Number = RR

当用户保存新行时,临时项目号将在表中删除.这是所有用户的解决办法,因为它是Multi-User-Application in MS-Access。它工作得很好,在MS Access中没有双项目编号.

我如何在MVC中做这样的事情呢?

更新:

我的表(简单的例子):

代码语言:javascript
复制
|ID|ProjectNo|Pos|

ID是PrimaryKey。ProjectNo是不可空的。Pos是不可为空的。当用户开始使用应用程序时,DB是临时的。这样的一排:

代码语言:javascript
复制
|ID|ProjectNo|Pos|
------------------
| 1|2017000  |  1|

第一个用户进入创建视图。在现在看来,ProjectNo应该是自动的2017001。他可以用n个职位来挽救他的约会。保存表后,应该如下所示:

代码语言:javascript
复制
|ID|ProjectNo|Pos|
------------------
| 1|2017000  |  1|
------------------
| 2|2017001  |  1|
------------------
| 3|2017001  |  2|
------------------

下一个用户得到2017002等等.

更新2:

这是我的Controller-Code (创建-获取):

代码语言:javascript
复制
[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:

通过你的评论,我尝试了这样的方法:

代码语言:javascript
复制
[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中的代码看起来:

代码语言:javascript
复制
[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:

现在,使用下面的代码,它可以工作,但最终不能工作:

代码语言:javascript
复制
[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显示?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-04 08:44:01

在控制器中,您可以这样做。

变量n= dc.HN_Retoure_Stamm.OrderBy(a => a.ID).Last().ID

票数 0
EN

Stack Overflow用户

发布于 2017-09-04 12:35:50

好的。现在,它可以使用以下代码:

代码语言:javascript
复制
[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);
    }
}

谢谢大家:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46031949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档