【问题标题】:Pass Selected Dropdown Value to Controller using a Button使用按钮将选定的下拉值传递给控制器
【发布时间】:2018-01-09 02:45:21
【问题描述】:

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

查看:

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

【问题讨论】:

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


    【解决方案1】:

    您的链接使用剃须刀代码指定路由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 根据所选选项构建一个 url 来进行重定向

    <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();
    }
    

    【讨论】:

    • 非常感谢,您介意详细说明查询字符串与路由值位吗?我不明白两者都会产生什么影响。
    • 我认为当它是查询字符串时,它可以映射到控制器的动作中(在这种情况下,参数名称应该匹配id)。
    • 当您使用表单进行 GET 时,任何表单控件的值始终作为查询字符串值添加到 url - 浏览器不知道您的路由,因此无法生成 ../Invoice/Create/1 (假设您使用默认路由,您当前链接中的 href 属性将生成)。相反,它会生成../Invoice/Create?id=1
    • 两者都将点击控制器方法并传递所选选项的值。唯一的区别是当您进行重定向时它在浏览器地址栏中的显示方式。
    • 哦,我明白了。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多