2017-12-12 6 views
0

장바구니를 표시하는 asp.net (Core) 앱에서보기가 있습니다. 일반적인 장바구니 물건 - 장바구니에있는 항목을 나열합니다. 각 행에는 수량을 변경할 수있는 편집 가능한 필드와 사용자가 행을 "삭제"로 표시 할 수있는 편집 가능한 확인란이 있습니다.보기의 여러 단추 - 다른 방법

보기 하단에 "업데이트 카트"(행을 삭제하고 수량을 업데이트 함)에 대한 두 개의 버튼이 필요합니다. 다른 하나는 "주문 작성"을위한 것입니다.이 주문은 "카트 업데이트"와 동일하게 수행되지만 주문도 작성합니다.

하나의 버튼을 만들고 컨트롤러에서 적절한 메소드를 호출 할 수 있지만 두 번째 버튼을 추가하는 데 문제가 있으며 다른 메소드를 호출해야합니다.

@model CustomerPortal.Models.StoreViewModels.CartViewModel 
@{ 
    ViewData["Title"] = "View"; 
} 

<h2>Shopping Cart</h2> 
<form asp-action="UpdateCart"> 
    <table class="table"> 
     <thead> 
     <tr> 
      <th>Item</th> 
      <th>Size</th> 
      <th>Colour</th> 
      <th>Quantity</th> 
      <th>Unit Price Inc. GST</th> 
      <th>Line Amount Inc. GST</th> 
      <th>Delete</th> 
     </tr> 
     </thead> 
     <tbody> 
     @for (var i = 0; i < Model.CartLines.Count; i++) 
     { 
      <tr> 
       @Html.HiddenFor(modelItem => modelItem.CartLines[i].CartLine.ID) 
       <td>@Html.DisplayFor(modelItem => modelItem.CartLines[i].CartLine.Item.Description)</td> 
       <td>@Html.DisplayFor(modelItem => modelItem.CartLines[i].CartLine.ItemSize.Name)</td> 
       <td>@Html.DisplayFor(modelItem => modelItem.CartLines[i].CartLine.ItemColour.Name)</td> 
       <td>@Html.EditorFor(modelItem => modelItem.CartLines[i].CartLine.Quantity)</td> 
       <td>@Html.DisplayFor(modelItem => modelItem.CartLines[i].UnitPriceInecTax)</td> 
       <td>@Html.DisplayFor(modelItem => modelItem.CartLines[i].LineAmountIncTax)</td> 
       <td>@Html.EditorFor(modelItem => modelItem.CartLines[i].Delete)</td> 
      </tr> 
     } 
     </tbody> 
    </table> 
    <div class="form-group"> 
     <input type="submit" value="Update Cart" class="btn btn-default"/> 
     <input type="submit" value="Create Order" class="btn btn-default"/> 
    </div> 
</form> 

을 그리고 ShoppingCartController의 방법과 같이 : 나는 "@using (Html.BeginForm를 사용하려고했습니다

[HttpPost, ActionName("UpdateCart")] 
[Authorize] 
public async Task<IActionResult> UpdateCart(CartViewModel cart) 
{ 
    // Need to do some stuff here 
    return RedirectToAction("Index"); 
} 
[HttpPost, ActionName("CreateOrder")] 
[Authorize] 
public async Task<IActionResult> CreateOrder(CartViewModel cart) 
{ 
    // Need to do some stuff here 
    return RedirectToAction("Index"); 
} 

순간

은, 내 생각은 다음과 같습니다 "현재의 형식 (위와 같음)은"종류 "가 작동하는 유일한 방법입니다 (두 단추 모두 하나의 함수를 호출 함).

어떻게 그렇게 할 수 있습니까? 다른 방법? 또는 두 번째 매개 변수를 사용하여 같은 메서드를 호출 할 수도 있습니다 (순서를 만들지 여부를 나타냄).

감사합니다.

+0

에서 설명한 바와 같이, 자바 스크립트에서 버튼 클릭 이벤트를 납치하고 원하는 일에 부모 양식 action 속성 값을 설정하고 제출 이벤트를 트리거입니다 귀하의 기술에 의해 불가능한 다른 컨트롤러 두 가지 다른 양식을 사용하거나 아약스 함수로 양식을 게시하려고 –

답변

0

html5 formaction 속성을 사용하여 동일한 양식의 두 개의 서로 다른 URL에 제출할 수 있습니다. 당신이 제출 버튼의 formaction 속성을 지정하면

<form asp-action="UpdateCart"> 
    <!-- your form elements -->  
    <div class="form-group"> 
     <input type="submit" value="Update Cart" formaction="@Url.Action("UpdateCart")"/> 
     <input type="submit" value="Create Order" formaction="@Url.Action("CreateOrder")"/> 
    </div> 
</form> 

, 그것은 부모 폼의 action 속성 값을 대체합니다.

또 다른 옵션은 두 가지로 하나의 양식을 게시하려고 this post

+1

고마워. 그 formAction이 트릭을했습니다. – Shaggs