这个 Blazor EditForm 的错误是什么?

max*_*ena 8 .net blazor

我试图按照从 youtube 频道创建表单的说明进行操作,例如:https : //www.youtube.com/watch?v=zfqQ_fhmPOQhttps://www.youtube.com/watch?v=40njRXr6eUo 或者我什至尝试过像这样的一个非常简单的代码

    <EditForm Model="@author" OnValidSubmit="SaveAuthor">
            <p>
                <label></label>
                <InputText id="FirstName" @bind-Value="author.FirstName"/>
            </p>
     </EditForm>
Run Code Online (Sandbox Code Playgroud)

这是我的代码示例的 github 链接https://github.com/maxrena/BlazorServerApp.git 它仍然返回这样的错误 请帮我解决。

Isa*_*aac 12

这是罪魁祸首:

if ((EditContext == null) == (Model == null))
{
    throw new InvalidOperationException($"{nameof(EditForm)} requires a {nameof(Model)} " +
        $"parameter, or an {nameof(EditContext)} parameter, but not both.");
}
Run Code Online (Sandbox Code Playgroud)

您没有实例化您的模型,并且您没有 EditContext

你可能已经这样做了: Author author;

您应该按如下方式实例化您的对象:

你可以这样做:

   @code {
       Author author = new Author();
       public class Author
       {
          public string FirstName {get; set;} = "Charls"; 
        }
   }
Run Code Online (Sandbox Code Playgroud)

运行示例:

    <EditForm Model="@author" OnValidSubmit="SaveAuthor">
    <p>
        <label></label>
        <InputText id="FirstName" @bind-Value="author.FirstName" />
    </p>

    <p><button type="submit">Submit</button></p>
</EditForm>
@code {
    Author author = new Author();

    private void SaveAuthor()
    {
        Console.WriteLine(author.FirstName);
    }
    public class Author
    {
        public string FirstName { get; set; } = "Charls";
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...


M.H*_*san 8

要使服务器加载数据而不引发异常,您可以使用以下代码:

@if (author== null)
{
    <p><em>Loading...</em></p>
}
else
{
  <EditForm Model="@author">
  ....
</EditForm>
``
Run Code Online (Sandbox Code Playgroud)