Blazor server side Blazor-编辑时不保存预设输入值

Blazor server side Blazor-编辑时不保存预设输入值,blazor-server-side,Blazor Server Side,我对Blazor还是个新手。我有两张表格。一种是新的记录输入表单。这个很好用。另一个是编辑表单,我想从DB中读取值(我做得很好),然后用这些值显示表单-这很有效-并允许用户编辑值。我遇到的问题是,当编辑值时,切换到下一个字段,值会重置为原始值。我在这个用例的任何文档中都找不到任何东西 在进入表格之前,我称之为: @{ selectedPatient.readPatient(sharedVariables.editPatientId); } 选择的对象Patient是我在EditForm

我对Blazor还是个新手。我有两张表格。一种是新的记录输入表单。这个很好用。另一个是编辑表单,我想从DB中读取值(我做得很好),然后用这些值显示表单-这很有效-并允许用户编辑值。我遇到的问题是,当编辑值时,切换到下一个字段,值会重置为原始值。我在这个用例的任何文档中都找不到任何东西

在进入表格之前,我称之为:

@{
    selectedPatient.readPatient(sharedVariables.editPatientId);
}
选择的对象Patient是我在EditForm中使用的模型。这将从数据库中读取匹配的病历

<EditForm Model="@selectedPatient" OnValidSubmit="@HandleValidSubmit">

在表单中,我使用@bind value,如下所示:

<label>
        Patient phone number:
 </label>
 <InputText @bind-Value="selectedPatient.phone" id="phone" @onchange="changedPatient"/>

患者电话号码:
有许多字段。当用户键入新值,然后转到下一个字段时,旧值将重新出现。onchange未被识别为正在发生的更改

我尝试了很多东西的组合,但似乎无法克服这一点。非常感谢您的帮助

更多代码(为简洁起见,未包含所有输入变量):

使用系统;
使用System.ComponentModel.DataAnnotations;
使用System.Data.SqlClient;
命名空间mwhmockserviceui.Data
{
公共类有效病人
{
[必需]
[StringLength(20,ErrorMessage=“患者ID太长(限制为20个字符)。”
公共字符串patientID{get;set;}
//更多其他领域的数据验证功能
公共patientName对象patientName{get;set;}
[必需]
[StringLength(10,ErrorMessage=“DOB太长(限制为10个字符)。”
公共字符串dob{get;set;}
公用字符串电话{get;set;}
公共字符串kciPatientAccountNumber{get;set;}
公共字符串ron{get;set;}
公共字符串emergencyContactName{get;set;}
公共字符串emergencyContactPhone{get;set;}
公共字符串支付限制{get;set;}
公共字符串insuranceChangedFlag{get;set;}
公共字符串ionProgressFlag{get;set;}
公共地址对象[]地址{get;set;}
公共字符串连接字符串{get;set;}
公共有效病人()
{
patientID=“”;
patientName=新的patientName对象();
dob=“”;
电话=”;
kciPatientAccountNumber=“”;
ron=“”;
emergencyContactName=“”;
紧急联络电话=”;
支付限制=”;
保险变更标签=”;
ionProgressFlag=“”;
//地址在这里-需要创建两种地址类型的数组。
地址=新地址对象[2];
setAddresses();
connectionString=“Server=tcp:blahblahblah…”
}
}
@第页“/编辑患者”
@使用mwhmockserviceui.Data
@注入导航管理器NavManager
@注入sharedVariables sharedVariables
编辑模拟KCI患者
患者ID:@sharedVariables.editPatientId
错误消息:@sharedVariables.errorMessageText
@{
selectedPatient.readPatient(sharedVariables.editPatientId);
}

患者姓名:
 
中名:
 
姓氏:

提交    取消 @代码{ private validPatient Selected Patient=新的validPatient(); 私有无效更改患者() { sharedVariables.errorMessageText=“已更改的患者”; NavManager.NavigateTo(“/患者”); } 私人无效手册提交() { //添加代码以保存输入数据 sharedVariables.errorMessageText=selectedPatient.savePatient(sharedVariables.editPatientId); NavManager.NavigateTo(“/患者”); } 私有void canceltinput() { NavManager.NavigateTo(“/患者”); } 私有void updatePatient() { sharedVariables.errorMessageText=“更新患者”; } }
试试:

请注意引号中添加的@以启用双向绑定,从而对反馈给变量的输入元素进行更改。

请尝试:


注意在引号中添加@,以启用双向绑定,从而对反馈给变量的输入元素进行更改。

感谢您的建议,但这并没有改变行为。该值在字段外的选项卡上恢复为原始值。并且未输入changePatient方法。您能用t更新您的问题吗他完全编辑表单标记和代码,包括selectedPatient模型。我发现了问题,但不知道如何更正。每次更改字段时,代码:@{selectedPatient.readPatient(sharedVariables.editPatientId)}调用。似乎整个表单在onchange事件上呈现,从而再次调用读取。我不太确定html中执行selectedPatient.readPatient的代码块的作用是什么?我猜它会返回一些html?我认为这需要从html中提取出来并转换为代码。然后在其位置创建html,绑定到您需要的值从selectPatient.readPatient返回。基本上,您不希望您的HTML“执行”数据库读取。这应该在@code块中完成,并让HTML绑定到您返回的内容。selectedPatient.readPatient使用数据库中要编辑的记录的值填充模型类。不确定如何使其运行@code块,因为它需要在加载时执行。感谢您的建议,但这并没有改变行为。该值在字段外的选项卡上恢复为原始值。并且未输入changePatient方法。您能否使用完整的编辑表单标记和代码(包括selectedPatient模型)更新您的问题。我发现了问题m、 但不知道如何更正。每次更改字段时,都会调用代码:@{selectedPatient.readPatient(sharedVariables.editPatientId)}
using System;
using System.ComponentModel.DataAnnotations;
using System.Data.SqlClient;


namespace mwhmockserviceui.Data
{
    public class validPatient
    {
        [Required]
        [StringLength(20, ErrorMessage = "Patient ID too long (20 character limit).")]
        public string patientID {get; set;}

       // Look into data validation capabilities more for other fields
       public patientNameObject patientName {get; set;}
       [Required]
       [StringLength(10, ErrorMessage = "DOB too long (10 character limit).")]
       public string dob {get; set;}
       public string phone {get;set;}
       public string kciPatientAccountNumber {get; set;}
       public string ron {get; set;}
       public string emergencyContactName {get; set;}
       public string emergencyContactPhone {get; set;}
       public string payorRestriction {get; set;}
       public string insuranceChangedFlag {get; set;}
       public string ionProgressFlag {get; set;}

       public addressObject[] addresses {get; set;}
       public string connectionString {get;set;}

       public validPatient()
       {
           patientID="";
           patientName = new patientNameObject();
           dob="";
           phone="";
           kciPatientAccountNumber="";
           ron="";
           emergencyContactName="";
           emergencyContactPhone="";
           payorRestriction="";
           insuranceChangedFlag="";
           ionProgressFlag="";
           // addresses goes here - need to create an array of the two address types.
           addresses = new addressObject[2];
           setAddresses();
           connectionString = "Server=tcp:blahblahblah..."
       }
}

@page "/EditPatient"

@using mwhmockserviceui.Data
@inject NavigationManager NavManager
@inject sharedVariables sharedVariables

<h1>Edit Mock KCI Patient</h1>

<h3>Patient ID: @sharedVariables.editPatientId</h3>
<h3> Error message: @sharedVariables.errorMessageText</h3>

@{
    selectedPatient.readPatient(sharedVariables.editPatientId);
}

<EditForm Model="@selectedPatient" OnValidSubmit="@HandleValidSubmit">
    <DataAnnotationsValidator />
    <ValidationSummary />

<p>
    <label>
        Patient first name:
        <InputText @bind-Value="selectedPatient.patientName.firstName" />
    </label>
    &nbsp
    <label>
        Middle name:
        <InputText @bind-Value="selectedPatient.patientName.middleName" />
    </label>
    &nbsp
    <label>
        Last name:
        <InputText @bind-Value="selectedPatient.patientName.lastName" />
    </label>
</p>
<button class="btn btn-primary" type="submit">Submit</button>
&nbsp &nbsp &nbsp &nbsp
<button class="btn btn-primary" @onclick="CancelPatientInput">Cancel</button>

</EditForm>


@code {
    private validPatient selectedPatient = new validPatient();

    private void changedPatient()
    {
        sharedVariables.errorMessageText="changed patient";
        NavManager.NavigateTo("/Patients");
    }
    private void HandleValidSubmit()
    {
        // Add code to save the input data
        sharedVariables.errorMessageText = selectedPatient.savePatient(sharedVariables.editPatientId);
        NavManager.NavigateTo("/Patients");
    }

    private  void CancelPatientInput()
    {
        NavManager.NavigateTo("/Patients");
    }

    private void updatePatient()
    {
        sharedVariables.errorMessageText="Update Patient";
    }
}
@bind-value="@selectedPatient.phone"