2017-04-22 23 views
0

我有一個表有三列與前兩個制訂複合鍵HttpPost刪除MVC的組合鍵

  1. SrcSys(CompositeKey第一部分)
  2. CUSTID(CompositeKey第二部分)
  3. CustNm

我是以MVC Core開頭的ASP &的新手。

爲get方法下面的代碼工作得很好:

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什麼是合理的一段代碼?

回答

1

您需要將SrcSys和CustId放在表單中,以便它們可以在提交時傳遞給後端。

你可以把這種形式部分:

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

這些屬性不會被顯示,但它們將被提交。

旁註

不要使用HTML傭工(@ Html.DisplayFor,@ Html.HiddenFor ..)他們做事的老辦法。 與MVC核心來使用標籤助手:

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

+0

感謝您的所有建議,但同樣的HttpPost代碼會是什麼? – InAction

0

我解決了自己的問題: 更新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> 
} 

難道工作!!! :-)