2017-08-02 38 views
0

下の例では、ボタンをクリックすると、ドロップダウンリストで選択した値をコントローラに渡す必要があります。どのように値を渡すことができますか?ボタンを使用して選択したドロップダウン値をコントローラに渡す

ビュー:

@model BillingModel 
... 
<select id="ddl" asp-for="SelectedCompanyID" asp-items="Model.Companies" class="form-control"></select> 

<a asp-action="Create" asp-controller="Invoice" asp-route-id="@Model.SelectedCompanyID" class="btn btn-primary btn-sm"></span> Create Invoice</a> 
.... 

モデル:

public class BillingModel 
{ 
    public int SelectedCompanyID { get; set; }  

    public SelectList Companies { get; set; }  
} 

答えて

2

あなたのリンクは、サーバー側のコードでルートid値を指定するには、かみそりのコードを使用しています。オプションが選択されているため、クライアント側では変更されません。

いずれかのGETを行い、オプション値

<form asp-controller="Invoice" asp-action="Create" method="get"> 
    <select id="ddl" asp-for="SelectedCompanyID" asp-items="Model.Companies" class="form-control"></select> 
    <input type="submit" value="Create Invoice" /> // you can style this to look like your link if you want 
</form> 

これはidのためのクエリ文字列値でURLを生成することに注意してください、ないルート値(すなわち、それは../Invoice/Create?id=1が生成されますを送信するフォームを使用します、ない../Invoice/Create/1

また、あなたが選択したオプションに基づいてURLを構築することにより、リダイレクトを行うためにはJavaScript/jQueryのを使用することができます

<a id="create" href="#" class="btn btn-primary btn-sm">Create Invoice</a> 

$('#create').click(function() { 
    var baseUrl = '@Url.Action("Create", "Invoice")'; 
    location.href = baseUrl + '/' + $('#SelectedCompanyID').val(); 
} 
+0

素晴らしいおかげさまで、クエリ文字列とルート値のビットについて詳しく説明してもらえますか?どちらの効果があるのか​​分かりません。 – Reafidy

+0

私はそれがクエリ文字列だと思う、コントローラのアクション(パラメータ名はこの場合は 'id'と一致する必要があります)にマップできます。 – Unbreakable

+0

フォームを使用してGETを行うと、フォームコントロールの値は常にurl as query string値に追加されます。ブラウザはルートを認識していないので、 '../ Invoice/Create/1'を生成できません。 (あなたの現在のリンクの 'href'属性は、あなたがデフォルトルートを使っていると仮定して生成されます)。代わりに、 '../Insoice/Create=ID= 1'を生成します。 –

関連する問題