如何将数据从DropDownList保存到db

问题描述 投票:0回答:1

我具有以下操作方法:

    //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(

.net asp.net-core
1个回答
0
投票
[第一件事是确保您正确获得$("#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),

© www.soinside.com 2019 - 2024. All rights reserved.