2017-12-30 115 views
0

ここではテーブルにいくつかの行があり、この場合はアイテムと呼ばれる商品のフラグをリストしています。フラグをオンまたはオフ(yes/no)として編集する場合は、クリックしたアイテムのフラグを識別する他の方法がないため、アイテム全体にアクセスする必要があります。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のままです。しかし、4番目のnullパラメータを渡すと、paramの一致が正しい –