我正在嘗試將包含過濾器的表單映射到我的視圖模型,但是當發送 ajax 帖子時,控制器物件為空。
這是我的視圖模型
public class FilterViewModel
{
public string GroupName { get; set; }
public List<Filter> Filters { get; set; }
}
public class Filter
{
public int Id { get; set; }
public string FilterName { get; set; }
public List<Facet> Facets { get; set; }
}
public class Facet
{
public int Id { get; set; }
public string Value { get; set; }
public bool Selected { get; set; }
}
這是我的控制器
[HttpPost]
public ActionResult Index([FromBody] FilterViewModel filterViewModel)
{
var auxFilters = filterViewModel;
try
{
if (auxFilters != null)
{
return Json(new
{
msg = "Successfully parsed filters"
}); ;
}
else
{
return Json(new
{
msg = "Object is empty"
}); ;
}
}
catch (Exception ex)
{
throw ex;
}
}
這是我的剃刀頁面
<body>
<div class="container-fluid">
<div class="row">
<div class="col-sm-3 container-fluid">
<form asp-action="Index" asp-controller="Overview" method="post" id="formfilter">
<input type="hidden" asp-for="@Model.GroupName" />
@for (int i = 0; i < Model.Filters.Count; i )
{
<article class="card-group-item">
<header class="card-header">
<label asp-for="@Model.Filters[i].Name">@Model.Filters[i].Name</label>
<input type="hidden" asp-for="@Model.Filters[i].Id" />
<input type="hidden" asp-for="@Model.Filters[i].FilterName" />
</header>
<div class="filter-content">
<div class="card-body">
@for (int j = 0; j < Model.Filters[i].Facets.Count; j )
{
<label class="form-check">
<input type="checkbox" asp-for="@Model.Filters[i].Facets[j].Selected" id="facetcheck">
<label asp-for="@Model.Filters[i].Facets[j].Selected">@Model.Filters[i].Facets[j].Value</label>
<input type="hidden" asp-for="@Model.Filters[i].Facets[j].Id" />
<input type="hidden" asp-for="@Model.Filters[i].Facets[j].Value" />
</label>
}
</div>
</div>
</article>
}
<div class="form-group">
<input type="submit" value="Filter" class="btn btn-primary" id="btnSubmit" />
</div>
</form>
</div>
</div>
</div>
</body>
@section Scripts
{
<script>
$(document).ready(function() {
$('input:checkbox').click(function() {
if(this.checked) {
$.ajax({
type: "POST",
url: "/Overview/Index",
data: $('form#formfilter').serialize(),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data)
{
alert(data);
}
});
}
});
});
</script>
}
使用提交按鈕時映射作業完美,但我想在有人單擊復選框時立即進行過濾。因此,每當有人檢查過濾器時,我都會嘗試制定呼叫控制器的邏輯
關于如何正確映射我的物體的任何想法
uj5u.com熱心網友回復:
將[FromBody]屬性替換為[FromForm]屬性。然后,在 ajax 查詢中,洗掉content-type:"application/json"陳述句。它對我很有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/375267.html
