我在视图中有一个选择,该选择始终向我的视图模型返回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; }
}
}
控制者
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中,select具有正确的值,如您在screeshot中所见:
但是由于某种原因,我从视图模型中的此select接收的值始终为零:
另外,如果我没有从选择中选择任何项目,则asp验证将无法捕获。
在过去的4个小时中,我一直在研究此问题,但没有发现类似的问题。
我正在使用Asp.Net MVC Core 2,.Net Core SDK 2.2,Windows 10 Pro和Visual Studio 2017 Community Edition。
参考方案
您看到的是值0
,因为这是int
的默认值。
提交表单后,默认的模型绑定器将尝试读取表单数据,并将值分配给视图模型对象的相应属性。如果CustomerId
是属性并且该属性是可设置的,则模型绑定程序将能够成功执行此操作。
在您共享的代码中,您不是在创建属性而是在创建字段。因此,模型绑定器无法为此设置值。
若要解决此问题,请通过指定CustomerId
和set
属性访问器将get
属性更改为可设置的。
[Required]
public int CustomerId { set; get; }
ASP.net C#崩溃一行 - c#我有一个母版页,在on load事件中包含以下几行: string menuIDdata = Page.Request.QueryString["mid"]; menuID = 0; // Get the menu ID if (!int.TryParse(menuIDdata, out menuID)) { menuID = 0; } …
使用Java脚本基于另一个控件项来验证ASP.NET C#控件 - c#我正在尝试确保一个下拉框或另一个下拉框具有选定的条目,不能两者都选,并且不能都留空/未选择。每次单击运行javascript验证代码的搜索按钮时,即使我只是从一个下拉列表中选择,甚至从两个下拉列表中都没有选择,我都会收到一条消息,好像在两个下拉框中都选择了一样!这可能是我的逻辑,但是,我认为也可能是我的变量读为null。是否有人对问题可能是什么以及如何解决这…
ASP.NET-如何更改JSON序列化的方式? - javascript我正在使用ASP.NET通过以下查询返回Json文件:public ActionResult getTransactionTotals(int itemID) { DBEntities db = new DBEntities(); var query = from trans in db.Transactions // Linq query removed …
ASP.net WebForms-如何从代码隐藏获取html5数据属性? - javascript即时通讯试图从HtmlControl获取数据属性(数据图标)...该数据属性是通过js函数设置的,但是当页面回发时,它返回(在代码后面)一个空字符串有什么办法,任何财产,否则就可以得到它?我的代码:HTML:<button id="btnIcon" runat="server" class="btn b…
Asp.Net:在服务器端还原DropDownList的客户端SelectedItem - c#因此,我的页面上有一个dropDownList,其中包含数百个项目。用户可以通过在文本框中键入一些文本来过滤此DDL。然后对DDL进行相应的过滤(所有不包含输入文本的项目都将通过JavaScript删除)。然后,用户选择他的项目并按下按钮。通常,这将导致错误,因为DDL已更改并且ASP验证了PostBack数据。但是,使用EnableEventValidat…