Ajax post 仅返回多个 select 框的第一个值
Ajax post only returning first value for multiple select box
我有一个 MVC 表单,它有一个应用了多个元素的 select 框,这样用户就可以 select 列表中的多个选项。
然后我有 ajax post 将此信息保存到 table:
$(".save").on("click", function (e) {
disableButton($(e.currentTarget));
waitForFinalEvent(function () {
$.ajax({
url: "@Url.Action("Requirements", "Api/Access")",
type: "POST",
data: {
UserId: "@ViewBag.Id",
Software: $("#ExtraSoftwareSelect").val(),
}
}).done(function (data) {
toastr.success("Successfully save information", "Success");
window.location.href = '@Url.Action("", "")';
}).fail(function (error) {
displayError(error);
}).always(function () {
enableButton($(e.currentTarget));
});
}, 250, "Saving results.");
});
我的select邮箱:
<div class="form-group col-xs-12 col-sm-4">
<div class="input-group ">
<span class="input-group-addon white">Extra Software</span>
<select class="form-control gray software-select" id="ExtraSoftwareSelect" title="Select Software" multiple></select>
</div>
</div>
我的动作控制器:
[HttpPost]
[Route("Requirements")]
[CustomApiAuthorize(Roles = UserRole.Manager)]
public async Task<IHttpActionResult> PostRequirements(RequirementsDetails data)
{
var software = await _slg_Entity.Software.FirstOrDefaultAsync(z => z.Software1 == data.Software);
var extraSoftware = new UserSoftware
{
UserId = data.UserId,
ExtraSoftware = data.Software,
SoftwareId = software.Id
};
Entity.UserSoftware.Add(extraSoftware);
await _slg_Entity.SaveChangesAsync();
return Ok();
}
问题是该字段的值仅 return 第一个 selected 选项 'MiniTab'。
我不确定它是如何通过的。也许它需要以某种方式添加到列表中?我希望它会 return 由逗号分隔的 selected 字符串。
欢迎所有建议,谢谢。
修正ajax
var softwareArr = $("#ExtraSoftwareSelect").val().slice();
$.ajax({
url: '@Url.Action("Requirements", "Api/Access")',
type: "POST",
data: {
details:
{
userId: "@ViewBag.Id",
extraSoftware: softwareArr
}
},
success: function (result) {
.....
},
error: function (xhr, exception) {
....
}
});
并修复 RequirementsDetails class
public class RequirementsDetails
{
public int UserId {get; set;}
public string[] ExtraSoftware {get;set;}
}
动作
Route("~/Api/Access/Requirements")]
public async Task<IHttpActionResult> PostRequirements(RequirementsDetails details)
.....
我有一个 MVC 表单,它有一个应用了多个元素的 select 框,这样用户就可以 select 列表中的多个选项。
然后我有 ajax post 将此信息保存到 table:
$(".save").on("click", function (e) {
disableButton($(e.currentTarget));
waitForFinalEvent(function () {
$.ajax({
url: "@Url.Action("Requirements", "Api/Access")",
type: "POST",
data: {
UserId: "@ViewBag.Id",
Software: $("#ExtraSoftwareSelect").val(),
}
}).done(function (data) {
toastr.success("Successfully save information", "Success");
window.location.href = '@Url.Action("", "")';
}).fail(function (error) {
displayError(error);
}).always(function () {
enableButton($(e.currentTarget));
});
}, 250, "Saving results.");
});
我的select邮箱:
<div class="form-group col-xs-12 col-sm-4">
<div class="input-group ">
<span class="input-group-addon white">Extra Software</span>
<select class="form-control gray software-select" id="ExtraSoftwareSelect" title="Select Software" multiple></select>
</div>
</div>
我的动作控制器:
[HttpPost]
[Route("Requirements")]
[CustomApiAuthorize(Roles = UserRole.Manager)]
public async Task<IHttpActionResult> PostRequirements(RequirementsDetails data)
{
var software = await _slg_Entity.Software.FirstOrDefaultAsync(z => z.Software1 == data.Software);
var extraSoftware = new UserSoftware
{
UserId = data.UserId,
ExtraSoftware = data.Software,
SoftwareId = software.Id
};
Entity.UserSoftware.Add(extraSoftware);
await _slg_Entity.SaveChangesAsync();
return Ok();
}
问题是该字段的值仅 return 第一个 selected 选项 'MiniTab'。 我不确定它是如何通过的。也许它需要以某种方式添加到列表中?我希望它会 return 由逗号分隔的 selected 字符串。
欢迎所有建议,谢谢。
修正ajax
var softwareArr = $("#ExtraSoftwareSelect").val().slice();
$.ajax({
url: '@Url.Action("Requirements", "Api/Access")',
type: "POST",
data: {
details:
{
userId: "@ViewBag.Id",
extraSoftware: softwareArr
}
},
success: function (result) {
.....
},
error: function (xhr, exception) {
....
}
});
并修复 RequirementsDetails class
public class RequirementsDetails
{
public int UserId {get; set;}
public string[] ExtraSoftware {get;set;}
}
动作
Route("~/Api/Access/Requirements")]
public async Task<IHttpActionResult> PostRequirements(RequirementsDetails details)
.....