2017-08-02 47 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

或者,你可以使用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

非常感謝,你會介意更詳細的查詢字符串vs路由值位?我不明白兩者的效果是什麼。 – Reafidy

+0

我認爲當它是查詢字符串時,它可以映射到控制器的動作中(在這種情況下,參數名稱應與'id'匹配)。 – Unbreakable

+0

當您使用表單進行GET時,任何表單控件的值始終會作爲查詢字符串值添加到網址中 - 瀏覽器不知道您的路由,因此無法生成「../ Invoice/Create/1」 (當前鏈接中的'href'屬性會生成假設您使用默認路由)。相反,它會生成'../ Invoice/Create?id = 1' –

相關問題