2009-06-04 11 views
0

ドロップダウンリストの選択した値を新しいアクションに送信するビューのいずれかにActionLinkを作成しようとしています。これまで私はこれを持っていましたが、私はActionLinkの最後にIDを設定する方法を見つける必要があります。ASP.Net MVC ActionLink

<%= Html.DropDownList("StatusDropDown") %> 
    <%= Html.ActionLink("Apply","Index",new {Controller="Tasks", Action="Index", id="DROPDOWN LIST SECLECTED VALUE"}) %> 

明らかに、このリンクは、ドロップダウンの選択されたインデックスが変更されるたびに更新する必要があります。これは私がjavascriptで行う必要があるか、ASP.Net MVCの中からこれを管理する良い方法がありますか?

ありがとうございました

答えて

2

フォーム提出を使用しない(フォームパラメータの代わりにURLの一部として渡す)場合は、javascriptを使用してURLクライアントサイドを構築する必要があります。

<%= Html.DropDownList("StatusDropDown") %> 
<a id="applyLink" href="#">Apply</a> 

<script type="text/javascript"> 

    function setHref(elem, val) 
    { 
     if (val) { 
      $(elem).attr("href", "/Tasks/" + val); 
      $("#applyLink").unbind("click"); 
     } 
     else { 
      $(elem).attr("href", "#"); 
      $("#applyLink").click(function() { alert("No value chosen"); }); 
     } 
    } 

    $(function() { 
     var dropdown = $("#StatusDropDown"); 
     dropdown.change(function() { 
      setHref(this, $(this).val()); 
     }); 
     setHref(dropdown, null); 
    }); 
</script> 
0

リンクは別のページに移動し、実際はリダイレクトされます。そのリンクがドロップダウンリストを参照してどこに移動するかを更新する唯一の方法は、javascriptを使用することです。

送信アクションのように思えます。その場合は、フォームと送信ボタンを使用して、コントローラに適切なハンドラを作成する必要があります。送信されたフォームの値に基づいてコントローラでリダイレクトを行うことができます。したがって、このような何か:

<form method="post" action="/MyForm"> 
    <input type="select" name="mySelect"> 
     <option value="1">First Option</option> 
     <option value="2">Second Option</option> 
    </input> 
</form> 

そして、あなたのコントローラに:この単純な例では明らかに

public ActionResult MyForm(int mySelect) 
{ 
    return Redirect(String.Format("myurl?id={0}", mySelect)); 
    // Note the above is only preferable if you're going to an external link 
    // Otherwise you should use the below: 
    return RedirectToAction("myAction", new { id = mySelect }); 
} 

、ご希望のアクションにMyFormをプロキシは冗長ですが、あなたはそれを適用することができますので、それは考えを示しあなたの特定の状況に。

+0

私はこれについても考えましたが、URLをRESTfulにしたい場合は、1回のアクションで2回の往復を嫌います。 – tvanfosson

+0

はい、これは単なる例です。あなたはフォームを/ myActionに提出することができます - 彼の具体的な設定はわかりませんが、これは原則を説明するためのものです – joshcomley

+0

私がフォームを使用しようとしたためactionLinkを使用した理由は、 /?StatusId = 1ここで、Tasks/filter/1/openのようなものを取得しようとしているところでは、1はステータスのID、openは名前です。この部分の読みやすいURLが必要です – Gavin

関連する問題