我正在建立一个主持人可以在某个电脑部分的网站。这只是我网站上的一个表单。我希望表单通过AJAX发布,因此在添加部件后它不会刷新。我正在用ASP.net Core 2.0制作应用程序
这是我的观点:
@model PcBuildAddViewModel
@{
ViewData["Title"] = "Add";
}
<div class="form-container">
<form id="AddPcForm" class="form-wrapper" method="post">
<p>Name:</p>
<input asp-for="@Model.PcPart._Name" type="text" class="form-control"/>
<br/>
<p >Type:</p>
<div class="form-select">
<select asp-for="@Model.PcPart._Type" asp-items="@Model.AllTypes">
</select>
</div>
<br/>
<p>Info:</p>
<input asp-for="@Model.PcPart.Information" type="text" class="form-control"/>
<br/>
<p>Properties:</p>
<div class="form-select">
<select asp-for="@Model.Properties" asp-items="@Model.AllProperties" multiple="multiple">
</select>
</div>
<br/>
<p>Image:</p>
<input asp-for="@Model.Image" type="file" class="inputfile inputfile-1"/>
<label asp-for="@Model.Image">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" viewBox="0 0 20 17">
</svg> <span>Choose a file…</span>
</label>
<br/>
<button class="btn btn-1 btn-1e" type="submit">
<span>Add</span>
</button>
</form>
</div>
我希望通过AJAX发布的视图模型:
public class PcBuildAddViewModel
{
public List<SelectListItem> AllProperties { get; } = new List<SelectListItem>();
public List<SelectListItem> AllTypes { get; } = new List<SelectListItem>();
public IFormFile Image { get; set; }
public PcPart PcPart { get; set; }
public List<int> Properties { get; set; }
public PcBuildAddViewModel()
{
}
public PcBuildAddViewModel(List<Propertie> allProperties, List<string> allTypes)
{
foreach (string type in allTypes)
{
SelectListItem listItem = new SelectListItem
{
Text = type,
Value = type
};
AllTypes.Add(listItem);
}
foreach (Propertie propertie in allProperties)
{
SelectListItem listItem = new SelectListItem
{
Text = propertie._Value,
Value = propertie.Id.ToString()
};
AllProperties.Add(listItem);
}
}
}
我希望收到表单的行动发布方法:
[HttpPost]
public IActionResult AddPcPart(PcBuildAddViewModel viewModel)
{
return RedirectToAction("Add");
}
最终我的AJAX:
$('#AddPcForm').on('submit', function(event) {
var viewModel = $(this).serialize();
ajaxPost("/PCBuild/AddPcPart", viewModel);
event.preventDefault();
});
function ajaxPost(ul, dt) {
$.ajax({
type: "POST",
url: ul,
dataType: "json",
contentType: "application/json; charset=utf-8",
data: dt,
success: ajaxSucces,
error: function(result) {
console.log(result);
}
});
}
我希望有人可以帮助我。我没有使用AJAX就尝试了这个,但是当我通过AJAX调用时,它运行良好。我得到一个空的viewmodel或者当我在控制器中将[Frombody]放在我的参数前面时,我得到一个null视图模型。
答案 0 :(得分:0)
感谢Stephen Muecke发布了答案。问题是contentType需要是默认值,所以我只删除了我的AJAX帖子中的contentType参数。之后我删除了[FromBody]因为不再需要了。