HTTPPOST删除复合键的MVC



我有一个带有三列的表

  1. srcsys(CompositeKey part I(
  2. CUSTID(CompositeKey Part II(
  3. custnm

我是ASP&从MVC核心开始。

以下获取方法的代码效果很好:

    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);
    }

delete.cshtml的相关代码是:

@model RiskDotNet.Models.Customer
@{
    ViewData["Title"] = "Delete";
}
@*<h2>Delete</h2>*@
<br />
<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>
<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>

所有三个字段都出现在页面上。

关于httppost,什么是合理的代码?

您需要将SRCSYS和CUSTID放在表格中,以便可以将其传递给提交的后端。

您可以将其放在形式的一部分中:

@Html.HiddenFor(model => model.SrcSys)
@Html.HiddenFor(model => model.CustId)

这些属性不会显示,但会提交。

sidenote

不要使用html帮助者( @html.displayfor, @html.hiddenfor ..(它们是旧的做事方式。使用MVC核心带来的标签助手:

https://learn.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro

我自己解决了问题:更新的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>
}

做了这份工作!!!: - (

最新更新