나는 다음을 수행하는 컨트롤러 액션이 "순서가 일치하는 요소를 포함하지 않는다"C#을 MVC5 RedirectToAction가 작동하지 않습니다 -
- 양식에서 제품 모델의 목록을 취합니다.
- 선택한 제품을 순환 게재하고 (IsSelected == true) 계정 모델에 추가합니다.
- 변경 사항을 저장하고 AccountID를 전달하여 다른 작업으로 리디렉션합니다.
- ID가 올바르게 수신되면 올바른 계정을 찾아보기로 전달합니다.
- 그러면보기가 계정을 구문 분석하고 위의 계정에 추가 된 제품 목록을 표시합니다.
그러나 MVC는 "시퀀스에 일치하는 요소가 없습니다"라는 오류가 계속 발생하며 그 이유를 파악하는 데 어려움을 겪고 있습니다.
제품의 목록을 소요하고 사용자의 계정에 추가계정 컨트롤러 :
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> AddProduct(List<Product> products)
{
//var acc = FetchCurrentUserAccount();
if (db.Accounts != null)
{
var acc = db.Accounts.Find(UserManager.FindByIdAsync(User.Identity.GetUserId()).Result.Account.AccountID);
foreach (var product in products)
{
if (product.IsSelected)
{
product.PaymentStatus = enPaymentStatus.Pending
acc.ProductsPurchased.Add(product);
}
}
await db.SaveChangesAsync();
return RedirectToAction("Pay", "Products", new {id = acc.AccountID});
}
return HttpNotFound();
}
, 계정 ID를 취 계정을 찾아 모델로보기에 전달
제품 컨트롤러 :
[HttpGet]
public ActionResult Pay(int? id)
{
var acc = db.Accounts.Find(id);
return View(acc);
}
보기 자체 :
@using PPPv2.Models
@model Account
@{ var subtotal = 0.0d;}
<h2>Payment:</h2>
@if (Model != null)
{
<h4>Thank you @Model.Salutation @Model.LastName</h4>
<h4>Please check that the product(s) and amounts below are correct before completing your purchase.</h4>
foreach (var item in Model.ProductsPurchased)
{
<div>
@Html.DisplayFor(modelItem => item.Name)
<div>
@Html.DisplayFor(modelItem => item.Price)
@{ subtotal += item.Price; }
</div>
</div>
}
<div>
Total to pay:
<div>
@Html.Display(String.Format("£{0:#,###0.00}", subtotal))
</div>
</div>
@Html.ActionLink("Pay", "Process", "Products", new {id = Model.ProductsPurchased.First(x => x.PaymentStatus == enPaymentStatus.Sold)}, new {@class = "btn btn-warning"})
}
else
{
<div>
No products were found in your cart... Odd...
<div>
@Html.ActionLink("Select a product", "AddProduct", "Account", null, new {@class = "btn btn-warning"})
</div>
</div>
}
참고할 사항 : 계정 컨트롤러에서 foreach는 (제품의 var에 제품) 루프 동안
- ; 제품이 올바르게 채워집니다. 그러나 계정에 추가하면 목록의 개수가 올바르게 증가하고 PaymentStatus는 정확하지만 나머지 필드는 null입니다.
- 새 제품()을 만들고 제품의 각 속성을 밀어 넣으면 동일한 결과가 나타납니다.
아이디어가 있으십니까?
똑똑한, 그 트릭을! Juann에게 감사드립니다. – Dezzamondo