C# 为什么布尔值不能正确显示在视图中?
我有一个bool值,用于区分保存到数据库链接表中的一系列其他项中的第一项。默认情况下,ViewModel的构造函数将其设置为C# 为什么布尔值不能正确显示在视图中?,c#,asp.net,asp.net-mvc,.net-core,C#,Asp.net,Asp.net Mvc,.net Core,我有一个bool值,用于区分保存到数据库链接表中的一系列其他项中的第一项。默认情况下,ViewModel的构造函数将其设置为true。当我的ViewModel发布到控制器时,我的控制器操作将此值更改为false,并将编辑后的ViewModel传递回视图,该值保存在隐藏字段中。 我遇到的问题是,更改值后,我的视图仍将此值显示为true。有人知道我哪里出错了吗 我还有一个问题,我将值重置回默认值,但在执行post操作后重新加载视图时,这些值将被保留 视图模型 public class NewScri
true
。当我的ViewModel发布到控制器时,我的控制器操作将此值更改为false
,并将编辑后的ViewModel传递回视图,该值保存在隐藏字段中。
我遇到的问题是,更改值后,我的视图仍将此值显示为true
。有人知道我哪里出错了吗
我还有一个问题,我将值重置回默认值,但在执行post操作后重新加载视图时,这些值将被保留
视图模型
public class NewScriptViewModel
{
public Patient Patient { get; set; }
public int PatientId { get; set; }
public int PrescriberId { get; set; }
public int DrugId { get; set; }
public int Qty { get; set; }
public string Directions { get; set; }
public bool FirstItem { get; set; }
public bool NextItem { get; set; }
public int ScriptId { get; set; }
public NewScriptViewModel()
{
FirstItem = true;
NextItem = false;
}
}
查看
@model DispensingApp.Models.ViewModels.NewScriptViewModel
@{
ViewData["Title"] = "New Script";
}
<h1>@Model.Patient.FullName</h1>
<h3>HCN : @Model.Patient.HCN</h3>
<hr />
<div class="row">
<br />
<div class="col-12" onload="newScriptItemForm.reset()">
<form id="newScriptItemForm" asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input asp-for="ScriptId" type="hidden" value="@ViewData["ScriptId"]" />
<input asp-for="DrugId" type="hidden" />
<table id="drugSelectionTable" class="table table-hover">
<thead>
<tr class="table-secondary">
<th></th>
<th>Name</th>
<th>Pack Size</th>
<th>Generic Ingredients</th>
<th>Stock</th>
</tr>
</thead>
</table>
<div class="form-group">
<div><input asp-for="PatientId" type="hidden" /></div>
</div>
<div class="form-group row">
<div class="col-2">
<label asp-for="Patient.Prescriber.FullName" class="control-label"></label>
</div>
<div class="col-4">
@if (Model.FirstItem)
{
<select asp-for="PrescriberId" class="form-control" asp-items="ViewBag.PrescriberId"></select>
}
else
{
<input asp-for="PrescriberId" type="hidden" />
<input type="text" placeholder="@Model.PrescriberId" class="disabled" />
}
</div>
</div>
<div class="form-group row">
<div class="col-2">
<label asp-for="Qty" class="control-label"></label>
</div>
<div class="col-4">
<input asp-for="Qty" class="form-control" />
</div>
<span asp-validation-for="Qty" class="text-danger"></span>
</div>
<div class="form-group row">
<div class="col-2">
<label asp-for="Directions" class="control-label"></label>
</div>
<div class="col-4">
<textarea asp-for="Directions" rows="3" class="form-control"></textarea>
</div>
<span asp-validation-for="Directions" class="text-danger"></span>
</div>
<div class="form-group row">
<div class="col-2">
<input asp-for="FirstItem" type="hidden" />
<input id="nextItem" asp-for="NextItem" type="hidden" />
<button id="nextItemBtn" @*type="submit" value="Next Item"*@ class="btn btn-primary form-control">Next Item</button>
</div>
<div class="col-2">
<button asp-action="NewScript" class="btn btn-success form-control">Next Script</button>
</div>
<div class="col-2">
<a asp-controller="Patients" asp-action="Details" asp-route-id="@Model.PatientId" class="btn btn-danger form-control">Cancel</a>
</div>
</div>
</form>
</div>
</div>
@model-DispensingApp.Models.ViewModels.NewScriptViewModel
@{
ViewData[“Title”]=“新建脚本”;
}
@Model.Patient.FullName
HCN:@Model.Patient.HCN
名称
包装尺寸
通用成分
股票
@if(型号第一项)
{
}
其他的
{
}
下一项
下一个脚本
取消
管制员职位
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(NewScriptViewModel viewModel,
[Bind("PatientId, PrescriberId")] Script script,
[Bind("DrugId, Qty, Directions")] ScriptDrug scriptDrug)
{
if (ModelState.IsValid)
{
//if first item of script -- create script entry
if (viewModel.FirstItem)
{
_context.Script.Add(script);
await _context.SaveChangesAsync();
viewModel.ScriptId = script.Id;
viewModel.FirstItem = false;
}
scriptDrug.ScriptId = (int)viewModel.ScriptId;
var drug = _context.Drug.Find(scriptDrug.DrugId);
drug.StockQty -= scriptDrug.Qty;
_context.ScriptDrug.Add(scriptDrug);
await _context.SaveChangesAsync();
return await Create(script.PatientId, viewModel);
}
viewModel.NextItem = false;
return await Create(script.PatientId, viewModel);
}
public async Task<IActionResult> Create(int id, NewScriptViewModel viewModel)
{
var patient = await _context.Patient.FindAsync(id);
var vm = new NewScriptViewModel();
//if not first item, reset view model but retain script id
if (!viewModel.FirstItem)
{
vm = viewModel;
}
vm.Patient = patient;
vm.PatientId = patient.Id;
return View(vm);
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建(NewScriptViewModel viewModel,
[Bind(“PatientId,PrescriberId”)]脚本,
[绑定(“药物ID、数量、方向”)]脚本药物脚本药物)
{
if(ModelState.IsValid)
{
//如果脚本的第一项--创建脚本条目
if(viewModel.FirstItem)
{
_context.Script.Add(脚本);
wait_context.SaveChangesAsync();
viewModel.ScriptId=script.Id;
viewModel.FirstItem=false;
}
scriptDrug.ScriptId=(int)viewModel.ScriptId;
var drug=_context.drug.Find(scriptDrug.DrugId);
药品库存数量-=脚本药品数量;
_context.ScriptDrug.Add(ScriptDrug);
wait_context.SaveChangesAsync();
返回等待创建(script.PatientId,viewModel);
}
viewModel.NextItem=false;
返回等待创建(script.PatientId,viewModel);
}
控制器获取
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(NewScriptViewModel viewModel,
[Bind("PatientId, PrescriberId")] Script script,
[Bind("DrugId, Qty, Directions")] ScriptDrug scriptDrug)
{
if (ModelState.IsValid)
{
//if first item of script -- create script entry
if (viewModel.FirstItem)
{
_context.Script.Add(script);
await _context.SaveChangesAsync();
viewModel.ScriptId = script.Id;
viewModel.FirstItem = false;
}
scriptDrug.ScriptId = (int)viewModel.ScriptId;
var drug = _context.Drug.Find(scriptDrug.DrugId);
drug.StockQty -= scriptDrug.Qty;
_context.ScriptDrug.Add(scriptDrug);
await _context.SaveChangesAsync();
return await Create(script.PatientId, viewModel);
}
viewModel.NextItem = false;
return await Create(script.PatientId, viewModel);
}
public async Task<IActionResult> Create(int id, NewScriptViewModel viewModel)
{
var patient = await _context.Patient.FindAsync(id);
var vm = new NewScriptViewModel();
//if not first item, reset view model but retain script id
if (!viewModel.FirstItem)
{
vm = viewModel;
}
vm.Patient = patient;
vm.PatientId = patient.Id;
return View(vm);
}
公共异步任务创建(int-id,NewScriptViewModel-viewModel)
{
var patient=wait_context.patient.FindAsync(id);
var vm=新的NewScriptViewModel();
//如果不是第一项,则重置视图模型,但保留脚本id
如果(!viewModel.FirstItem)
{
vm=视图模型;
}
vm.患者=患者;
vm.PatientId=patient.Id;
返回视图(vm);
}
所有这些之后呈现到浏览器的HTML如下所示:
<div class="col-2">
<input type="hidden" data-val="true" data-val-required="The FirstItem field is required." id="FirstItem" name="FirstItem" value="True">
<input id="nextItem" type="hidden" data-val="true" data-val-required="The NextItem field is required." name="NextItem" value="True">
<button id="nextItemBtn" class="btn btn-primary form-control">Next Item</button>
</div>
下一项
请显示视图的其余部分(如何注入模型)和模型类。我已在ViewModel中添加了视图语法和视图语法的其余部分,希望对其有更多的了解。我在get controller操作中有一些额外的行,用于设置我没有包含的viewdata变量