Blazor server side Blazor-编辑时不保存预设输入值
我对Blazor还是个新手。我有两张表格。一种是新的记录输入表单。这个很好用。另一个是编辑表单,我想从DB中读取值(我做得很好),然后用这些值显示表单-这很有效-并允许用户编辑值。我遇到的问题是,当编辑值时,切换到下一个字段,值会重置为原始值。我在这个用例的任何文档中都找不到任何东西 在进入表格之前,我称之为:Blazor server side Blazor-编辑时不保存预设输入值,blazor-server-side,Blazor Server Side,我对Blazor还是个新手。我有两张表格。一种是新的记录输入表单。这个很好用。另一个是编辑表单,我想从DB中读取值(我做得很好),然后用这些值显示表单-这很有效-并允许用户编辑值。我遇到的问题是,当编辑值时,切换到下一个字段,值会重置为原始值。我在这个用例的任何文档中都找不到任何东西 在进入表格之前,我称之为: @{ selectedPatient.readPatient(sharedVariables.editPatientId); } 选择的对象Patient是我在EditForm
@{
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>
 
<label>
Middle name:
<InputText @bind-Value="selectedPatient.patientName.middleName" />
</label>
 
<label>
Last name:
<InputText @bind-Value="selectedPatient.patientName.lastName" />
</label>
</p>
<button class="btn btn-primary" type="submit">Submit</button>
       
<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"