2017-12-30 9 views
0

여기 테이블에 몇 개의 행이 있고이 경우 항목이라고하는 내 제품의 플래그를 나열하고 있습니다. 플래그를 on 또는 off (예/아니오)로 편집하려면 클릭 한 항목의 플래그를 식별 할 수있는 다른 방법이 없기 때문에 전체 항목 자체에 액세스해야합니다.ActionLink를 통해 ASP.NET MVC 컨트롤러로 항목을 보내는 방법은 무엇입니까?

@foreach (var item in Model) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Name) 
     </td> 
     <td> 
      <ul> 
       @foreach (var flag in item.Flags) 
       { 
        <li> 
         @Html.DisplayFor(modelItem => flag.Name) | 
         @(flag.Enabled ? "Yes" : "No") | 
         @Html.ActionLink("Edit", "FlagEdit", new { flagId = flag.Id, itemId = item.Id }) 
        </li> 
       } 

      </ul> 
     </td> 

분명하지 않은 경우 문의하여 자세히 말씀 드리겠습니다. itemId를 보내려고하지만 foreach 플래그 내에 있기 때문에 그걸 잡을 수는 없습니다.

params가 null이 아닌 경우 첫 번째 메시지가 표시되면 확인이 실패합니다.

[ActionName("FlagEdit")] 
    public async Task<ActionResult> EditFlagAsync(string flagId, string itemId) 
    { 
     if (flagId == null || itemId == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 

     Item item = await DocDBRepo<Item>.GetItem(itemId); 
     if (item == null) 
     { 
      return HttpNotFound(); 
     } 

     //do update 

     return View(item); 
    } 

검색을 시도했지만 어쩌면 올바른 키워드를 검색하지 못했습니다. 아무도 도와 줄 수 있습니까?

+0

정확히 문제가 무엇인가? itemId가 제어 방법에 도달하지 못 했습니까? 귀하의 ActionLink는 괜찮아 보입니다. –

+0

컨트롤러와 정확한 지점으로 업데이트했습니다. flagId가 null이 아니므로 actionLink가 정상임을 압니다. foreach에서 내 항목을 보낼 수 없습니다. –

답변

1

이 시도 :

@Html.ActionLink("Edit", "FlagEdit", new { flagId = flag.Id, itemId = item.Id }, null) 
+0

왜 작동했는지 설명해 주시겠습니까? –

+1

ActionLink는 + 9 오버로드가있는 확장 메소드입니다. routeValues ​​뒤에 null을 설정하지 않으면 프레임 워크는 이러한 새로운 {flagId = flag.Id, itemId = item.Id}가 htmlAttributes 매개 변수라고 생각합니다. 이 경우 컨트롤러 수준의 매개 변수가 null로 유지됩니다. 그러나 네 번째 null 매개 변수를 전달하면 param 일치가 올바르게됩니다. –

관련 문제