我具有以下操作方法:
//POST: Employees/Create
[HttpPost]
//[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([FromBody] Employee employee)
{
if (ModelState.IsValid)
{
_context.Add(employee);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
**ViewData["PositionId"]** = new SelectList(_context.Positions, "PositionId", "PositionId", employee.PositionId);
return View(employee);
}
并且在视图上,我试图呈现下拉列表:
<div class="form-group">
<label asp-for="Position" class="control-label"></label>
@Html.DropDownList("PositionId", (IEnumerable<SelectListItem>)ViewData["PositionId"])
<span asp-validation-for="Position" class="text-danger"></span>
</div>
我看到下一个错误当我填写表单数据并单击保存在控制台中时,我看到PositionId为null,但是我填写了此字段。这是ajax方法
$("body").on("click", "#save", function () {
var form = $('form');
var token = $('input[name="__RequestVerificationToken"]', form).val();
var data_ = {
FistName: $("#FistName").val(),
LastName: $("#LastName").val(),
Position: $("#PositionId").val(),
};
$.ajax({
type: "post",
url: form.attr('action'),
data: JSON.stringify(data_),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (result) {
$("#add-employee").modal("hide");
$("#partial").html(result);
}
});
return false;
});
这是我的模特
public class Employee
{
[Key]
public int EmployeeId { get; set; }
public string FistName { get; set; }
public string LastName { get; set; }
public int PositionId { get; set; }
public Position Position { get; set; }
}
public class Position
{
[Key]
public int PositionId { get; set; }
public string PositionName { get; set; }
public ICollection<Employee> Employees { get; set; }
}
如何解决?我无法将此位置保存到db(
$("#PositionId").val()
,可以在js函数中使用alert($("#PositionId").val())
进行测试。在模型绑定期间,属性名称应该匹配,因此您应该修改:Position: $("#PositionId").val(),
收件人:
PositionId: $("#PositionId").val(),
如果使用ASP.NET Core 3.0+,则可以使用system.text.json
将值解析为int:
PositionId: parseInt($("#PositionId").val(),10),