表中的MVC选择项发送到控制器方法ID和所选项

时间:2011-08-29 20:42:30

标签: jquery asp.net-mvc

我一直在研究一些代码,以便在下拉列表中选择项目时,它会被发送到控制器上的方法。我喜欢这样的事情:

@foreach (var invoiceLine in Model.InvoiceLines) {
                        <tr><td>
                        <span>Administrator:</span>
                        @Html.DropDownList("dropDownList", new[]
        { 
            new SelectListItem { Text="", Value="0" },
            new SelectListItem { Text = "First", Value = "1" }, 
            new SelectListItem { Text = "Second", Value = "2" } 
        })

结合jQuery

$(function () {
        $("#dropDownList").change(function () {
            $("#dropDownList option:selected").each(function () {
                $.getJSON("/Home/Owner/" + $(this)[0].value, null, function (data) {
                    doSomething();
                });
            });
        });

无论如何,除了发送所选项目索引之外,我还想发送每个id的{​​{1}}即。 invoiceLine

有人可以告诉我该怎么做吗?

此外,我已经意识到我的当前代码存在问题,invoiceLine.id只会找到名为jQuery的第一个dropDown,即使会有很多。

任何方式围绕这个?

我能以正确的方式解决这个问题吗?

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

如果您正在对它们执行任何操作,则立即向后发送这些值会使您受到其他安全攻击。

在大多数情况下,您只想返回他们选择的值(即使这样,您也需要根据您最初发送的内容来验证它是否是合法值。)

答案 1 :(得分:0)

我建议您将数据属性添加到

@Html.DropDownList("dropDownList", new[]
    { 
        new SelectListItem { Text="", Value="0" },
        new SelectListItem { Text = "First", Value = "1" }, 
        new SelectListItem { Text = "Second", Value = "2" } 
    }, new{data-id=@invoiceLine.id })

稍后您将能够在JQuery函数中获取此值

$("select here your dropdown list").attr("data-id")

顺便说一句,ID用于标识 only 元素,如果你想标记许多元素(如你的情况)使用类。