List< Model>使用一个参数,该参数在更改时应该来自下拉列表

本文关键字:参数 下拉列表 一个 Model List | 更新日期: 2023-09-27 18:03:54

我有一个列表类型的视图,模型有一个selectList,在改变时应该改变actionLink参数。

我试过使用表单并将模型的所有内容发布到控制器,但它不起作用。

这是视图的一部分

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.coursenumber)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.coursename)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.coursescopename)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.avetmiss)
        </td>
        <td>
            @Html.DropDownListFor(modelitem => item.InvoiceOptionsId, item.InvoiceOptionsList, "--select--", new {@class = "form-control", id = "ddl" + item.coursenumber})
        </td>
        <td>
            @Html.ActionLink("Events","Events",new{id= item.coursenumber,priceKey = item.InvoiceOptionsId})
        </td>
    </tr>
}

priceKey是从下拉列表中计算出来的

List< Model>使用一个参数,该参数在更改时应该来自下拉列表

你需要使用javascript/jquery来处理客户端事件。一种选择是将html修改为(假设是for循环-参见下面的注释)

<td>
  @Html.DropDownListFor(m => m[i].InvoiceOptionsId, Model[i].InvoiceOptionsList, "--select--", new { @class = "form-control" })
</td>
<td>
  <a href="#" class="event" data-id="@Model[i].coursenumber">Events</a>
</td>

然后添加以下脚本(需要jquery{version}.js)

$(function() {
  var url = '@Url.Action("Events")';
  $('.event').click(function() {
    var id = $(this).data('id'); // get the items id
    var priceKey = $(this).closest('tr').find('select').val(); // get the value of the associated dropdown
    location.href = url + '?id=' + id + '&priceKey=' + priceKey; // redirect
  });
});

注意:它不清楚如果你已经显示的代码是一个表单的一部分,你发回,但如果是这样,你需要使用一个for循环(或自定义EditorTemplate)来生成表单控件。使用foreach循环生成重复的name属性(没有索引器),当你发布表单时,这些属性将不会绑定到你的模型。