Ajax 回发不会更改所选值的 MVC 下拉列表
Ajax postback does not change MVC dropdownlistfor selected value
我正在使用 ASP.NET MVC 5,我遇到了一个问题,当我 post 返回使用 ajax 时,下拉列表选择的值没有改变,正在传递空选择值Model.SelectedItem。与 Html.DropDownListFor 的情况不同,Html.EditorFor 确实将文本输入中的值传递给了 Model.ItemA 和 Model.ItemB。
注意:
我已经检查了给定的 html,看起来默认选择了第一个选项值,但在 ajax 调用中 Model.SelectedItem 仍然为空。当 ajax 被调用时,下拉列表显示仍然是我们之前选择的选项,但是 html 检查的选择选项仍然显示为第一个选项并且 Model.SelectedItem 保持为空。
如果在页面上完成完整 post 后退,则实现的下拉列表工作得很好,但部分调用 ajax 的情况则不然。
希望我已经清楚地描述了我遇到的问题。下面是我做的代码。
$('#SelectedItem').change(function(){
var itemA = $('#ItemA').val();
var itemB = $('#ItemB').val();
var selectedItem = $('#SelectedItem:selected').val();
$.ajax({
url: '@Url.Action("Index", "Home")',
type: "POST",
data: { param1 = itemA, param2 = itemB, param3 = selectedItem },
success: function(){
$('#ajaxDisplay').html('...');
}
});
});
<div id = "Container">
@Html.EditorFor(model => model.ItemA);
@Html.EditorFor(model => model.itemB);
@Html.DropDownListFor(model => model.SelectedItem, new SelectList(Model.Item, "Value", Text"), new {@class= ""})
<div id = "ajaxDisplay">
</div>
</div>
[HttpPost]
public ActionResult Index(string param1, string param2, int? param3)
{
return View();
}
var itemA = $('ItemA').val();而不是 var itemA = $('ItemA:selected').val();
如 Stephen Muecke 所述
我正在使用 ASP.NET MVC 5,我遇到了一个问题,当我 post 返回使用 ajax 时,下拉列表选择的值没有改变,正在传递空选择值Model.SelectedItem。与 Html.DropDownListFor 的情况不同,Html.EditorFor 确实将文本输入中的值传递给了 Model.ItemA 和 Model.ItemB。
注意: 我已经检查了给定的 html,看起来默认选择了第一个选项值,但在 ajax 调用中 Model.SelectedItem 仍然为空。当 ajax 被调用时,下拉列表显示仍然是我们之前选择的选项,但是 html 检查的选择选项仍然显示为第一个选项并且 Model.SelectedItem 保持为空。
如果在页面上完成完整 post 后退,则实现的下拉列表工作得很好,但部分调用 ajax 的情况则不然。
希望我已经清楚地描述了我遇到的问题。下面是我做的代码。
$('#SelectedItem').change(function(){
var itemA = $('#ItemA').val();
var itemB = $('#ItemB').val();
var selectedItem = $('#SelectedItem:selected').val();
$.ajax({
url: '@Url.Action("Index", "Home")',
type: "POST",
data: { param1 = itemA, param2 = itemB, param3 = selectedItem },
success: function(){
$('#ajaxDisplay').html('...');
}
});
});
<div id = "Container">
@Html.EditorFor(model => model.ItemA);
@Html.EditorFor(model => model.itemB);
@Html.DropDownListFor(model => model.SelectedItem, new SelectList(Model.Item, "Value", Text"), new {@class= ""})
<div id = "ajaxDisplay">
</div>
</div>
[HttpPost]
public ActionResult Index(string param1, string param2, int? param3)
{
return View();
}
var itemA = $('ItemA').val();而不是 var itemA = $('ItemA:selected').val();
如 Stephen Muecke 所述