使用按钮将选定的下拉值传递给控制器

时间:2017-08-02 04:03:47

标签: c# asp.net-mvc entity-framework asp.net-core

在下面的示例中,单击按钮时,下拉列表中选择的值应传递给控制器​​,但不是。我该如何传递该值?

查看:

@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; }    
}

1 个答案:

答案 0 :(得分: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的查询字符串值的网址,而不是路由值(即它会生成../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();
}