Запрос Infinity Ajax, когда выпадает изменение в нокауте MVC
Я использую Knockout MVC в своем проекте. Я пытаюсь передать viewModel при изменении Drop Down. но когда я пытаюсь вызвать этот метод несколько раз, и предупреждение "ок" вызывает продолжение. Может кто-нибудь, пожалуйста, помогите мне в этом??
$(function () {
$('#rmch').change(function () {
$.ajax({
url: '@Url.Action("DropChange", "Home")',
type: 'POST',
data: ko.mapping.toJSON(viewModel),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
if (data.redirect) {
location.href = resolveUrl(data.url);
}
else {
//ko.applyBindings(viewModel, document.getElementById("p_scentsFH"));
alert("Ok");
ko.mapping.fromJS(data, viewModel);
}
},
error: function (error) {
alert("There was an error posting the data to the server: " + error.responseText);
},
});
});
});
Мой метод Джсона
public JsonResult DropChange(HotelModel hotelmod)
{
//hmodel.RoomModel = new List<RoomModel>();
//for (int i = 1; i <= hmodel.NoOfRooms; i++)
//{
// hmodel.RoomModel.Add(new RoomModel { adultsDrp = ListItems.GetList(1, 6), childDrop = ListItems.GetList(0, 5) });
// //hmodel.RoomModel.Add(new RoomModel { });
//}
var jjj = JsonConvert.SerializeObject(hotelmod);
return Json(hotelmod);
}
Мой взгляд
<div class="search-tab-content">
<div class="tab-pane fade active in" id="hotels-tab">
<form id="searchfrm">
<div class="title-container">
<h2 class="search-title">Search and Book Hotels</h2>
<p>We're bringing you a new level of comfort.</p>
<i class="soap-icon-hotel"></i>
</div>
<div class="search-content">
<h5 class="title">Where</h5>
<label>Your Destination</label>
@ko.Html.TextBox(m => m.Destination, new { @class = "input-text full-width", @placeholder = "Any destination, country, city code" })
@ko.Html.Hidden(new { @Id = "DesCode" }).Value(m => m.DesCode)
<hr>
<h5 class="title">When</h5>
<div class="row">
<div class="col-xs-4">
<label>Check In</label>
<div class="datepicker-wrap">
@ko.Html.TextBox(m => m.CheckInDate, new { @class = "input-text full-width" })
</div>
</div>
<div class="col-xs-4">
<label>Check Out</label>
<div class="datepicker-wrap">
@ko.Html.TextBox(m => m.CheckOutDate, new { @class = "input-text full-width" })
</div>
</div>
<div class="col-xs-4">
<label>ROOMS</label>
<div class="selector">
@ko.Html.DropDownList(m => m.RoomList, new { @class = "full-width jkl", @id = "rmch" }, "Text", "Value").Value(m => m.NoOfRooms)
</div>
</div>
</div>
<hr>
<div id="p_scentsFH">
@using (var rmModel = ko.Foreach(m => m.RoomModel))
{
<h5 class="title">Room 1</h5><div class="row">
<div class="col-xs-3">
<label>ADULTS</label>
<div class="selectorgen">
@rmModel.Html.DropDownList(m => m.adultsDrp, new { @class = "full-width" },"Text","Value").Value(m=>m.adultscount)
</div>
</div>
<div class="col-xs-3">
<label>KIDS</label>
<div class="selectorgen">
@rmModel.Html.DropDownList(m => m.childDrop, new { @class = "full-width" }, "Text", "Value").Value(m => m.childcount)
</div>
</div>
<div class="agecls">
@using(var chage=rmModel.Foreach(m=>m.childage))
{
<div class="col-xs-3">
<label>Child</label>
<div class="selectorgen">
@chage.Html.DropDownList(m => m.ageDrop, new { @class = "full-width" },"Text","Value").Value(m=>m.Age)
</div>
</div>
}
</div>
</div><hr>
}
</div>
<button type="submit" class="full-width uppercase">Search Cheap Hotels</button>
</div>
}
</form>
</div>
</div>
1 ответ
Решение
Я полагаю, что когда перенаправление не произошло, то в другой части привязка модели представления вызывает изменение вашего раскрывающегося значения, и, следовательно, раскрывающееся окно события change срабатывает снова и снова. Убедитесь, что вы не меняете выбранный элемент в раскрывающемся списке с вызова ajax.