C# 为什么布尔值不能正确显示在视图中?

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

我有一个bool值,用于区分保存到数据库链接表中的一系列其他项中的第一项。默认情况下,ViewModel的构造函数将其设置为
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变量