gpt4 book ai didi

c# - asp.net mvc core 2在 View 模型中选择值始终为0

转载 作者:行者123 更新时间:2023-12-02 18:32:02 25 4
gpt4 key购买 nike

我在 View 中有一个选择,它总是向我的 View 模型返回 0,但我不知道为什么:

查看模型:

// CreateLifeInsuranceViewModel.cs
using InsuranceListManager.Models.EntityFrameworkModels;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace InsuranceListManager.Models.ViewModels.Home
{
public class CreateLifeInsuranceViewModel
{
[Required]
public int CustomerId;

public IList<CustomerModel> Customers { get; set; }

[Required]
public string InsuredPersonCPF { get; set; }
}
}

Controller

public class HomeController
{
public IActionResult CreateLifeInsurance()
{
var customers = (
from c in _db.Customers select c
).ToList();

var model = new CreateLifeInsuranceViewModel
{
Customers = customers
};

return View(model);
}

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateLifeInsurance(CreateLifeInsuranceViewModel model)
{
if (ModelState.IsValid)
{
var category = _db.InsuranceCategories.Where(c => c.Id == InsuranceCategoryModel.LIFE_INSURANCE).First();

var insurance = new InsuranceModel
{
CategoryId = category.Id,
CustomerId = model.CustomerId
};

_db.Add(insurance);
await _db.SaveChangesAsync();

var lifeInsurance = new LifeModel
{
InsuranceId = insurance.Id,
InsuredPersonCPF = model.InsuredPersonCPF
};

_db.Add(lifeInsurance);
await _db.SaveChangesAsync();

return RedirectToAction(nameof(Index));
}

return BadRequest(ModelState);
}
}

查看:

@model InsuranceListManager.Models.ViewModels.Home.CreateLifeInsuranceViewModel

@{
ViewData["Title"] = "New Insurance";
}

<h1>New Insurance</h1>

<hr />
<form asp-action="CreateLifeInsurance">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-row">
<div class="form-group col-sm-6">
<label asp-for="CustomerId">Customer</label>
<select class="form-control" asp-for="CustomerId" asp-items="@(new SelectList(Model.Customers, "Id", "Name"))">
<option value="">Select the customer</option>
</select>
<span asp-validation-for="CustomerId" class="text-danger"></span>
</div>
<div class="form-group col-sm-6">
<label asp-for="InsuredPersonCPF">Insured Person CPF</label>
<input type="text" class="form-control" asp-for="InsuredPersonCPF" placeholder="CPF" />
<span asp-validation-for="InsuredPersonCPF" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
<a class="btn" asp-action="Index">Cancel</a>
</div>
</form>

@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

在渲染的 HTML 中,选择具有正确的值,如屏幕截图中所示:

enter image description here

但由于某种原因,我从 View 模型中的此选择收到的值始终为零:

enter image description here

此外,如果我不从选择中选择任何项目,asp 验证将不会捕获。

过去 4 小时我一直在研究这个问题,没有发现任何类似的问题。

我使用的是 Asp.Net MVC Core 2、.Net Core SDK 2.2、Windows 10 Pro 和 Visual Studio 2017 Community Edition。

最佳答案

您看到的是值 0,因为这是 int 的默认值。

提交表单时,默认模型绑定(bind)器将尝试读取表单数据并将值分配给 View 模型对象的相应属性。如果 CustomerId 是一个属性并且该属性是settable,模型绑定(bind)器将能够成功执行此操作。

在您共享的代码中,您没有创建属性,而是创建字段。因此模型绑定(bind)器无法为其设置值。

要解决此问题,请通过指定 setgetCustomerId 属性更改为 settable属性访问器。

[Required]
public int CustomerId { set; get; }

关于c# - asp.net mvc core 2在 View 模型中选择值始终为0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53808948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com