AJAX post 我的控制器的模型视图
AJAX post a modelview to my controller
我正在制作一个网站,版主可以在其中的某个 pc 部分。这只是我网站上的一个表格。我希望表格 post 通过 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>
我想 post 通过 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);
}
}
}
我的操作 Post 方法,我想在其中接收表单:
[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 时。我得到一个空视图模型,或者当我将 [Frombody] 放在控制器中我的参数前面时,我得到一个空视图模型。
感谢 Stephen Muecke post编辑了答案。问题是 contentType 需要是默认值,所以我只是删除了 AJAX post 中的 contentType 参数。之后我删除了 [FromBody] 因为不再需要它了。
我正在制作一个网站,版主可以在其中的某个 pc 部分。这只是我网站上的一个表格。我希望表格 post 通过 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>
我想 post 通过 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);
}
}
}
我的操作 Post 方法,我想在其中接收表单:
[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 时。我得到一个空视图模型,或者当我将 [Frombody] 放在控制器中我的参数前面时,我得到一个空视图模型。
感谢 Stephen Muecke post编辑了答案。问题是 contentType 需要是默认值,所以我只是删除了 AJAX post 中的 contentType 参数。之后我删除了 [FromBody] 因为不再需要它了。