【发布时间】:2020-03-18 01:45:45
【问题描述】:
我正在尝试使用 ajax 帖子将我的下拉值发布到我的控制器。除了我的下拉选择列表之外,所有表单值都可以正常传递。当我使用浏览器的 devtools 查看 select 元素时,它的名称为 SortByList。
型号
public IList<SortBy> SortByList { get; set; }
public class SortBy
{
public string Text { get; set; }
public bool Selected { get; set; }
}
查看下拉列表
@using (Html.BeginForm("FDCLSubmit", "Reports", FormMethod.Post, new { id =
"reportForm", @class = "report-form col-9" }))
{
<div class="row">
<b class="col-2" style="padding-top: 5px;">Sort By</b>
<select asp-for="SortByList" class="form-control col-3">
@for (var x = 0; x < Model.SortByList.Count; x++)
{
<option value="@Model.SortByList[x].Text">@Model.SortByList[x].Text</option>
}
</select>
</div>
(saveSubmit button partial view here)
}
Ajax 帖子
$('#saveSubmit').on('click', function (evt) {
var report = $('form').serialize();
var form = new Object();
form.report = report;
form.EnteredCriteriaName = $('#EnteredCriteriaName').val();
//Ajax form post
$.ajax({
type: 'POST',
data: form.report,
contentType: dataType,
url: '@Url.Action("FDCLCheckIfExists", "Reports")',
success: function (data) {
if (data.exists == true) {
//Toggle the error modal and display messages
$('#existsModal').modal('toggle');
$('#modalYes').on('click', function () {
//User selected to replace report criteria
$.ajax({
type: 'POST',
data: form.report,
contentType: dataType,
url: '@Url.Action("SaveFDCLCriteria", "Reports")',
success: function (data) {
console.log(data);
if (data.success) {
window.location.href = data.url;
} else {
//Toggle the error modal and display messages
$('#errorsModal').modal('toggle');
//Add <br> tags when there is a linebreak in the string. This will add the line breaks into the HTML.
$('#errorsModal .modal-body p').html(data.message.replace(/(?:\r\n|\r|\n)/g, '<br>'));
}
}
});
});
}
}
});
});
控制器
我在这个控制器中设置了断点,这就是我的report 的SortByList 属性出现为空的地方。
public ActionResult FDCLCheckIfExists(FirstDollarCreditListing report, string EnteredCriteriaName)
{
var criteria = report.ConvertToCriteria(report);
criteria.CriteriaName = EnteredCriteriaName;
var rep = new ReportFirstDollarCreditListing();
var exists = rep.DoesCriteriaNameAlreadyExist(criteria);
return Json(new { exists = exists });
}
【问题讨论】:
-
你应该在cshtml文件中发布所有表格
-
html 中的表单元素在哪里?找不到它,也无法知道您从 jquery 检索的内容是否是您应该发送的内容
-
我避免发布整个表单,因为它很长,但我已在表单创建助手中添加。
标签: javascript c# ajax asp.net-mvc asp.net-core