0

ページにドロップダウンリスト(DropDownListFor)とActionLinkがあります。基本的に、私が抱えている問題は、ドロップダウンリストから選択した値をキャプチャし、それをIDとしてActionLinkに渡そうとしていることです。これが私のコードです:

@Html.DropDownListFor(x => x.Capsules, new SelectList(Model.Capsules, "pk", "name", "pk"))
<br />
@Html.ActionLink("Submit", "Create", 
    new { controller = "Process", id = /*JavaScript here to get the selected ID for the DropDownList above*/ },
    new { data_role = "button" })

私が達成しようとしていることについて、JavaScriptをHtml.ActionLink呼び出しに埋め込む方法はありますか?方法がない場合、または推奨されていない場合は、この問題を解決するための別の解決策を教えてください。前もって感謝します!

4

2 に答える 2

1

id次のように、パラメータにダミー値を設定できます。

@Html.ActionLink("Submit", "Create", 
    new { controller = "Process", id = "dummy" },
    new { data_role = "button" })

次に、リンクがクリックされたときにその値を置き換えます。

// Assuming your link's id is `submit`, and the dropdown's id is `capsules`
$('#submit').click(function() {
    var id = $('capsules').val();
    $(this).href = $(this).href.replace('dummy', id);
});
于 2013-02-27T04:20:36.657 に答える
1

これは、javascriptを使用してリンクをインターセプトすることで実行できます。Darinがこのを投稿しました。

ただし、ActionLinkを使用していくつかの値を送信しようとしているようです。必要なすべての値を保持するビューモデルを作成し、送信ボタンを使用してすべてを投稿する方がよいでしょう。これにより、IDだけでなく、より多くのデータを投稿できるようになり、Javascriptに依存することを防ぎ、すべてのコードサーバー側を混合して一致させるのではなく維持できます。

あなたが投稿した小さなコードから判断すると、あなたはすでにモデル、おそらくいくつかの強く型付けされたエンティティを持っており、Capsulesと呼ばれるプロパティを持っています。

コントローラで、ビューのデータを保持するビューモデルを作成します。

public class YourViewModel
{
   YourModel YourModel { get; set; }

   public int CapsuleId { get; set; }
}

次に、あなたの見解:

@using( @Html.BeginForm( "Create", "Process"  ) )
{
@Html.DropDownListFor(m=> m.CapsuleId, new SelectList(Model.YourModel.Capsules, "pk", "name", "pk"))
<input type="submit">
}

次に、これを処理するためのコントローラーアクション:

[HttpPost]
public ActionResult Create( YourViewModel model )
{
   var id = model.CapsuleId;

  // do what you're going to do with the id
   return View();
}
于 2013-02-27T05:01:19.293 に答える