HttpPost删除复合键的MVC

时间:2017-04-22 06:37:01

标签: asp.net-mvc asp.net-core

我有一个包含三列的表格,前两个用于制定复合键

  1. SrcSys(CompositeKey Part I)
  2. CustId(CompositeKey Part II)
  3. CustNm
  4. 我是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什么是合理的代码?

2 个答案:

答案 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>
}

做完了! : - )