- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试了解 Blazor 的内部工作原理(并最终编写一些中间件)。我有一个 fiddle以三种不同的方式绑定(bind)三个不同的字段:
为了便于引用,下面是 fiddle 的代码:
@page "/"
@using System.ComponentModel.DataAnnotations
@using System.Linq.Expressions;
@using System.Reflection;
@implements IHasEditContext;
<h1>Hello, world!</h1>
<EditForm EditContext="this.EditContextRef">
<DataAnnotationsValidator></DataAnnotationsValidator>
<div class="form-group">
<InputText @bind-Value="@this.FirstName" class="form-control" />
<ValidationMessage For="() => this.FirstName"></ValidationMessage>
</div>
<div class="form-group">
<input @bind-value="@this.MiddleName" class="form-control" />
<ValidationMessage For="() => this.MiddleName"></ValidationMessage>
</div>
<div class="form-group">
<input value="@this.LastName" class="form-control" @onchange="(CreateBinder2(this, () => this.LastName, this.LastName))" />
<ValidationMessage For="() => this.LastName"></ValidationMessage>
</div>
<input type="submit" value="Go" />
</EditForm>
@code {
protected override void OnInitialized()
{
base.OnInitialized();
EditContextRef = new EditContext(this);
}
//BasicFormValidator Form1Validator = new BasicFormValidator();
[Required]
public String FirstName { get; set; } = "delete me and change focus to cause validation";
[Required]
public String MiddleName { get; set; } = "delete me and change focus - no validation";
[Required]
public String LastName { get; set; } = "delete me and change focus - validation but manually calling NotifyFieldChanged";
public EditContext EditContextRef { get; set; }
public static EventCallback<ChangeEventArgs> CreateBinder2(
IHasEditContext receiver,
Expression<Func<string?>> propExpression,
string existingValue,
System.Globalization.CultureInfo? culture = null)
{
var fieldIdentifier = FieldIdentifier.Create(propExpression);
Action<String> valueSetter = (string v) =>
{
PropertyInfo prop = fieldIdentifier.Model.GetType().GetProperty(fieldIdentifier.FieldName, BindingFlags.Public | BindingFlags.Instance);
prop.SetValue(fieldIdentifier.Model, v);
receiver.EditContextRef.NotifyFieldChanged(fieldIdentifier);
};
return EventCallback.Factory.CreateBinder<string>(receiver, valueSetter, existingValue, culture);
}
}
最佳答案
But i still don't understand how the submit did manage to raise NotifyFieldChanged
它没有。当您提交 EditForm 时,会调用 EditContext.Validate() 并验证模型中的所有 字段(属性)。
我不知道 Validate() 的确切内部工作原理,但您可以将其添加到 fiddle 中:
<input type="button" value="Check" @onclick="ValidateThis" />
和
void ValidateThis()
{
Console.WriteLine("Before " + string.Join(",", EditContextRef.GetValidationMessages()));
EditContextRef.Validate();
Console.WriteLine("After " + string.Join(",", EditContextRef.GetValidationMessages()));
}
如果 MiddleName 为空,则“After”写入行将包含它。
关于blazor - 通知 EditContext 该字段已更改以进行 Blazor 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68718570/
当 Form 中的值发生变化时零件。 Editform 没有验证,也没有设置 IsModified的FieldState为真。只有在提交时才会生效。我看到当值发生变化时,“修改”类没有在 HTML 中
如何解决此 Blazor 服务器错误? EditForm requires either a Model parameter, or an EditContextparameter 我在下面创建了一个
我正在尝试了解 Blazor 的内部工作原理(并最终编写一些中间件)。我有一个 fiddle以三种不同的方式绑定(bind)三个不同的字段: FirstName 字段绑定(bind)到 InputTe
我正在将 RazorPages 应用程序转换为 Blazor 服务器呈现,该应用程序实际上只是一个 UI,所有数据访问/操作都是通过 API 完成的。在 CRUD 操作中,API 将以标准化格式返回错
我创建了一个 EditForm像这样包裹一张 table : **Index.razor** @using System.ComponentModel.DataAnnotations;
我正在开发一个 ASP.NET 5.0 blazor web assembly应用程序。我需要在仪表板屏幕中有一个日期选择器来选择一个日期来显示详细信息。 这是我的代码: 我需要在更改日期时触发 A
我是一名优秀的程序员,十分优秀!