我希望能够使用 Blazor(服务器端渲染)渲染表单,但我没有获得正确的语法。
<EditForm Model="@Model" OnValidSubmit="@SubmitValidForm">
<FluentValidationValidator />
<ValidationSummary />
<p class="name">
Name: <InputText bind-Value="@Model.Name" placeholder="Name"/>
</p>
<button type="submit">Submit</button>
</EditForm>
@code {
Person Model = new Person();
void SubmitValidForm()
{
Console.WriteLine("OnValidSubmit");
}
}
和
public class Person : ComponentBase
{
[Required(ErrorMessage = "Enter a name")]
[StringLength(10, ErrorMessage = "That name is too long")]
public string Name { get; set; } = "asd";
[Range(0, 200, ErrorMessage = "Nobody is that old")]
public int AgeInYears { get; set; }
[Required]
[Range(typeof(bool), "true", "true", ErrorMessage = "Must accept terms")]
public bool AcceptsTerms { get; set; }
}
但是我收到这个错误
Microsoft.AspNetCore.Components.Forms.InputText 需要“ValueExpression”参数的值。通常,使用“bind-Value”时会自动提供此值。
如何呈现页面并向服务器发送简单的帖子?
对我来说,这是因为我使用了
@bind-value
。
v
为大写。使用@bind-Value
今晚我一直在为同样的事情而苦苦挣扎。 我在“bind-Value”之前省略了“@”符号(我可以将其称为属性吗?)并得到完全相同的错误。
根据 ASP.NET Core Blazor 表单和验证页面,您应该将 InputText 元素的声明更改为
<InputText @bind-Value="@Model.Name" placeholder="Name"/>
我添加 @ 字符,我的控件就会呈现。
我忘记了
@
前面的@bind-Value="@Model.Name"
。应该是@bind-Value="@Model.Name"
,而不是bind-Value="@Model.Name"
。
添加到
InputText
字段无意义咒语
ValueExpression="@( () => Model.Name )"
是的,这没有意义,但这是有效的。
不幸的是,
Blazor
并不是一个真正的商业开发环境,因为Blazor
不支持VB.NET
,不支持jQuery
,不被Visual Studio Designer支持,不方便像ASP.NET
这样的
Pager
开发者组件、
DataGrid
等等。这只是一个明显赤裸裸的想法,但存在很多问题。
此错误通常在未提供 ValueExpression 参数时发生,使用 @bind-Value 时通常会自动处理。
我使用@bind-Value 遇到了同样的问题。 尝试更改 ValueEpression 而不是 @bind-Value
一个简单的例子是: