Asp.net mvc 如何加载上一个employeeid的值+;1在添加操作中
我有控制器名emp有动作添加 我需要在操作添加视图加载时显示最后一个值增加1英寸 employeeid文本框 意思是假设我在employee表中有employeeid值1,那么当操作添加时 视图加载的employeeid必须有2个 那该怎么做呢 在行动上我写了什么 [httpget] 隐藏复制代码 public IActionResult Create() { 我在这里写什么 } 查看添加 我在这里写什么Asp.net mvc 如何加载上一个employeeid的值+;1在添加操作中,asp.net-mvc,entity-framework,model-view-controller,Asp.net Mvc,Entity Framework,Model View Controller,我有控制器名emp有动作添加 我需要在操作添加视图加载时显示最后一个值增加1英寸 employeeid文本框 意思是假设我在employee表中有employeeid值1,那么当操作添加时 视图加载的employeeid必须有2个 那该怎么做呢 在行动上我写了什么 [httpget] 隐藏复制代码 public IActionResult Create() { 我在这里写什么 } 查看添加 我在这里写什么 <div class="form-group">
<div class="form-group">
<label asp-for="EmployeeId" class="control-label"></label>
<input asp-for="EmployeeId" class="form-control" />
<span asp-validation-for="EmployeeId" class="text-danger"></span>
</div>
并且我将模型传递给视图
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="EmployeeId" class="control-label"></label>
<input asp-for="EmployeeId" class="form-control" />
<span asp-validation-for="EmployeeId" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="BranchCode" class="control-label"></label>
<input asp-for="BranchCode" class="form-control" />
<span asp-validation-for="BranchCode" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="EmployeeName" class="control-label"></label>
<input asp-for="EmployeeName" class="form-control" />
<span asp-validation-for="EmployeeName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="EmployeeAge" class="control-label"></label>
<input asp-for="EmployeeAge" class="form-control" />
<span asp-validation-for="EmployeeAge" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="JoinDate" class="control-label"></label>
<input asp-for="JoinDate" class="form-control" />
<span asp-validation-for="JoinDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="BirthDate" class="control-label"></label>
<input asp-for="BirthDate" class="form-control" />
<span asp-validation-for="BirthDate" class="text-danger"></span>
</div>
<div class="form-group">
<div class="checkbox">
<label>
<input asp-for="Active" /> @Html.DisplayNameFor(model => model.Active)
</label>
</div>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</form>
</div>
</div>
@DisplayNameFor(model=>model.Active)
如果您的模型具有属性EmployeeId
,请将此值设置为如下所示
public IActionResult Create()
{
var model = new Employee();
model.EmployeeId = _context.GetAll().Max(Employee => Employee.EmployeeId).FirstOrDefault() + 1;
return View(model);
}
或者,如果您没有要传递到视图的模型
,请使用视图包
ViewBag["maxEmployeeId"] = _context.GetAll().Max(Employee => Employee.EmployeeId).FirstOrDefault() + 1;
请不要使用.GetAll()
,这将导致性能问题。这意味着您正在将所有员工记录加载到应用程序端,然后实际查询加载的员工数据。试想一下,如果你有5万多名员工。因此,您必须使用LINQIQueryable
扩展方法,它将根据您的设计查询生成SQL操作
帮助链接:
如果你想做一些其他的表达,请试试这个
context.Employee.Select(x => x.EmployeeId).DefaultIfEmpty(0).Max()+1
你为什么需要这个?我觉得您应该依靠数据库为您生成下一个ID值。EF会这样做。你能告诉我怎么做吗?你能告诉我怎么做吗?当你的实体有一个主键时,EF在保存新记录时不是为你这样做吗?这是不明智的做法,因为你的数据库通常在插入记录时会处理这个问题。如果您在加载视图时生成id,然后另一个用户也会这样做并在您之前插入,则当您点击submit时,该id将已经存在,因此,最有可能引发异常。好的,在视图中,如何传递变量var maxEmployeeId的此值,您可以使用ViewBag
。视图中如果可能,还有一件事要做:如何定义ViewBag[“maxEmployeeId”]您是否将任何模型
传递给视图?
context.Employee.Select(x => x.EmployeeId).DefaultIfEmpty(0).Max()+1