我有一个包含三列的表格,前两个用于制定复合键
我是ASP&的新手从MVC Core开始。
以下get方法代码运行良好:
Date
Delete.cshtml的相关代码是:
public async Task<IActionResult> Delete(string _SrcSys, string _CustId)
{
if (_SrcSys == null || _CustId == null)
{
return NotFound();
}
var customer = await _context.Customers.SingleOrDefaultAsync(Cust => Cust.SrcSys == _SrcSys && Cust.CustId == _CustId);
if (customer == null)
{
return NotFound();
}
return View(customer);
}
所有三个字段都显示在页面上。
关于HttpPost什么是合理的代码?
答案 0 :(得分:1)
您需要将SrcSys和CustId放在表单中,以便将它们传递给提交的后端。
你可以把它放在表格部分:
@Html.HiddenFor(model => model.SrcSys)
@Html.HiddenFor(model => model.CustId)
这些属性不会显示,但会提交。
<强>旁注强>
不要使用Html助手(@ Html.DisplayFor,@ Html.HiddenFor ..),他们是旧的做事方式。 使用MVC Core附带的标签助手:
https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro
答案 1 :(得分:1)
我自己解决了这个问题: 更新了HttpPost:
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> DeletePost(Customer customer)
{
try
{
_context.Entry(customer).State = EntityState.Deleted;
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
catch (DbUpdateConcurrencyException)
{
return RedirectToAction("Delete", new { ss = customer.SrcSys, ci = customer.CustId });
}
}
并更新了Delete.cshtml:
@model RiskDotNet.Models.Customer
@{
ViewData["Title"] = "Delete";
}
<hr />
<dl class="dl-horizontal">
<dt>
Src Sys
</dt>
<dd>
@Html.DisplayFor(model => model.SrcSys)
</dd>
<dt>
Cust ID
</dt>
<dd>
@Html.DisplayFor(model => model.CustId)
</dd>
<dt>
Customer
</dt>
<dd>
@Html.DisplayFor(model => model.CustNm)
</dd>
</dl>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.SrcSys)
@Html.HiddenFor(model => model.CustId)
<form asp-action="Delete">
<div class="form-actions no-color">
<input type="submit" value="Delete" class="btn btn-default" />
<p />
<p />
<input type="submit" value="Cancel" class="btn btn-default" a asp-action="Index">
</div>
</form>
}
做完了! : - )