ASP部分视图下拉列表都在变化

时间:2017-07-18 23:02:38

标签: javascript jquery asp.net-mvc this

使用ASP.Net Core MVC

该网站包含多个包含酒店的下拉菜单,一旦用户选择酒店,Ajax呼叫将返回所选酒店的酒店客房。用户可以选择多达10家酒店+酒店房间组合,因此每个酒店和酒店房间的标准都在一个单独的局部视图中。

当我从其中一个局部视图中选择一家酒店时,所有酒店下拉都会转移到同一家酒店。

我认为这是我的javascript中的内容,所以我注释掉了所有相关的javascript,除了获取酒店的电话。这是我的代码:

部分视图

@model Cfv3.Models.Vacation.SelectHotelRoom
<select class="hotel-dropdown" name="hotel"></select>
<select class="hotelroom-dropdown" name="hotel"></select>

调用视图

<div class="form-horizontal">
    @for (int i = 0; i < Model.IncludedHotels.Count; i++)
    {
        @Html.Partial("_PossibleHotelRoom", Model.IncludedHotels[i])
        <hr/>  
    }
</div>

加载Ajax后加载酒店

$.get('GetHotels', function (data) {
    //console.log(data);
    $.each(data, function (index, value) {
        //console.log(value.id + " " + value.name)
        $('<option>').val(value.id).text(value.name).appendTo('.hotel-dropdown');
    });
});

2 个答案:

答案 0 :(得分:0)

在jquery中使用last()

$.get('GetHotels', function (data) {
    //console.log(data);
    $.each(data, function (index, value) {
        //console.log(value.id + " " + value.name)
        $('<option>').val(value.id).text(value.name).appendTo('.hotel-dropdown').last();
    });
});

修改:这只是解决当前问题的一种解决方案。我相信你会根据不同的要求提供许多替代解决方案。

答案 1 :(得分:0)

我终于找到了一个解决方案,它不是最干净的,但它确实有效。 在局部视图中,我从两个选择器中删除了名称,然后根据传入的模型ID创建了一个id。

batch_size: 32

虽然我没有询问控制第二次下拉菜单,但它有一个非常类似的问题,所以我修改了ajax调用如下:

@model Cfv3.Models.Vacation.SelectHotelRoom
@{ 
  var localhotelid = Model.Id + "hotel";
  var localhotelroomid = localhotelid + "room";
}
<select class="hotel-dropdown" id=@localhotelid></select>
<select class="hotelroom-dropdown" id="@localhotelroomid"></select>

我确信有一种更清洁的方式,但它有效。