创建方法不起作用,因为id始终返回零

时间:2020-07-29 11:19:40

标签: c# asp.net-core

我正在使用ASP.NET Core 2.1,并试图创建一个用户。但是,当我运行Web应用程序并尝试创建用户时,Id返回0。我曾尝试在剃刀视图中使用隐藏字段,但ID仍返回零且未添加用户。

这是我的用户类别:

public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Username { get; set; }
    public int DepartmentID { get; set; }
    public int FacultyID { get; set; }
    public string Country { get; set; }
    public string State { get; set; }
    public string LGA { get; set; }
    public string Email { get; set; }
    public string PhoneNo { get; set; }
    public string Grade { get; set; }
    public Department Department { get; set; }
    public Faculty Faculty { get; set; }
}

这是控制器中的create方法:

[HttpGet]
public async Task<IActionResult> Create()
{
    var fac = await _faculty.GetAll();
    var dept = await _department.GetAll();
    var facList = fac.Select(f => new SelectListItem()
    {
        Value = f.facultyName.ToString(),
        Text = f.facultyName
    });
    var deptList = dept.Select(d => new SelectListItem()
    {
        Value = d.deptName.ToString(),
        Text = d.deptName
    });
    ViewBag.fac = facList;
    ViewBag.dept = deptList;
    return View();
}

[HttpPost]
public async Task<IActionResult> Create(User user)
{
    var createUser = await _userService.AddAsync(user);

    if (createUser)
    {
        Alert("User created successfully.", NotificationType.success);
        return RedirectToAction("ListUsers", "User");
    }
    else
    {
        Alert("User not created!", NotificationType.error);
    }

    return View();
}

这是添加用户的剃刀视图:

<form asp-controller="User" method="post">
    <input asp-for="Id" name="Id" type="hidden" />
    <div class="position-relative row form-group">
        <label asp-for="FirstName" class="col-sm-2 col-form-label">First Name</label>
        <div class="col-sm-10"><input asp-for="FirstName" type="text" class="form-control"></div>
        <span asp-validation-for="FirstName"></span>
    </div>
    <div class="position-relative row form-group">
        <label asp-for="LastName" class="col-sm-2 col-form-label">Last Name</label>
        <div class="col-sm-10"><input asp-for="LastName" type="text" class="form-control"></div>
        <span asp-validation-for="LastName"></span>
    </div>
    <div class="position-relative row form-group">
        <label asp-for="Username" class="col-sm-2 col-form-label">Username</label>
        <div class="col-sm-10"><input asp-for="Username" type="text" class="form-control"></div>
        <span asp-validation-for="Username"></span>
    </div>
    <div class="position-relative row form-group">
        <label asp-for="Country" class="col-sm-2 col-form-label">Country</label>
        <div class="col-sm-10"><input asp-for="Country" type="text" class="form-control"></div>
        <span asp-validation-for="Country"></span>
    </div>
    <div class="position-relative row form-group">
        <label asp-for="State" class="col-sm-2 col-form-label">State</label>
        <div class="col-sm-10">
            <select asp-for="State" class="mb-2 form-control" onchange="toggleLGA(this);" name="state" id="state">
                <option value="" selected="selected">- State -</option>
                <option value="Abia">Abia</option>
                <option value="Adamawa">Adamawa</option>
                <option value="AkwaIbom">AkwaIbom</option>
                <option value="Anambra">Anambra</option>
                <option value="Bauchi">Bauchi</option>
                <option value="Bayelsa">Bayelsa</option>
                <option value="Benue">Benue</option>
                <option value="Borno">Borno</option>
                <option value="Cross River">Cross River</option>
                <option value="Delta">Delta</option>
                <option value="Ebonyi">Ebonyi</option>
                <option value="Edo">Edo</option>
                <option value="Ekiti">Ekiti</option>
                <option value="Enugu">Enugu</option>
                <option value="FCT">FCT</option>
                <option value="Gombe">Gombe</option>
                <option value="Imo">Imo</option>
                <option value="Jigawa">Jigawa</option>
                <option value="Kaduna">Kaduna</option>
                <option value="Kano">Kano</option>
                <option value="Katsina">Katsina</option>
                <option value="Kebbi">Kebbi</option>
                <option value="Kogi">Kogi</option>
                <option value="Kwara">Kwara</option>
                <option value="Lagos">Lagos</option>
                <option value="Nasarawa">Nasarawa</option>
                <option value="Niger">Niger</option>
                <option value="Ogun">Ogun</option>
                <option value="Ondo">Ondo</option>
                <option value="Osun">Osun</option>
                <option value="Oyo">Oyo</option>
                <option value="Plateau">Plateau</option>
                <option value="Rivers">Rivers</option>
                <option value="Sokoto">Sokoto</option>
                <option value="Taraba">Taraba</option>
                <option value="Yobe">Yobe</option>
                <option value="Zamfara">Zamafara</option>
            </select>
        </div>

    </div>

    <div class="position-relative row form-group">
        <label asp-for="LGA" class="col-sm-2 col-form-label">LGA</label>
        <div class="col-sm-10">
            <select asp-for="LGA" name="lga" id="lga" class="mb-2 form-control select-lga" required>
                <option value="" selected="selected">- Local Government -</option>
            </select>
        </div>
    </div>
    <div class="position-relative row form-group">
        <label asp-for="Faculty" class="col-sm-2 col-form-label">Faculty</label>
        <div class="col-sm-10">
            <select class="mb-2 form-control" asp-for="Faculty" asp-items="@ViewBag.fac">
                <option>Faculty</option>
            </select>
        </div>
        <span asp-validation-for="Faculty"></span>
    </div>
    <div class="position-relative row form-group">
        <label asp-for="Department" class="col-sm-2 col-form-label">Department</label>
        <div class="col-sm-10">
            <select class="mb-2 form-control" asp-for="Department" asp-items="@ViewBag.dept">
                <option>Department</option>
            </select>
        </div>
        <span asp-validation-for="Department"></span>
    </div>
    <div class="position-relative row form-group">
        <label asp-for="Email" class="col-sm-2 col-form-label">Email</label>
        <div class="col-sm-10"><input asp-for="Email" type="email" class="form-control"></div>
        <span asp-validation-for="Email"></span>
    </div>
    <div class="position-relative row form-group">
        <label asp-for="PhoneNo" class="col-sm-2 col-form-label">Phone Number</label>
        <div class="col-sm-10"><input asp-for="PhoneNo" type="text" class="form-control"></div>
        <span asp-validation-for="PhoneNo"></span>
    </div>
    <div class="position-relative row form-group">
        <label asp-for="Grade" class="col-sm-2 col-form-label">Grade</label>
        <div class="col-sm-10"><input asp-for="Grade" type="text" class="form-control"></div>
        <span asp-validation-for="Grade"></span>
    </div>

    <div class="row">
        <div class="position-relative row form-check">
            <div class="col-sm-10 offset-sm-2">
                <button asp-action="Create" class="btn btn-secondary">Submit</button>
            </div>
        </div>
    </div>

</form>

我将非常感谢我能获得的所有帮助。

1 个答案:

答案 0 :(得分:0)

删除<input asp-for="Id" name="Id" type="hidden" />


Id将在SaveChangesAsync()之后自动添加。

如果在<input>视图中设置Id的{​​{1}}元素,则它将仅从Create中读取值。

测试

<input>之前

enter image description here

SaveChangesAsync

之后

enter image description here

相关问题