【问题标题】:What is the error of this Blazor EditForm?这个 Blazor EditForm 的错误是什么?
【发布时间】:2020-09-30 18:47:30
【问题描述】:

我尝试按照以下说明从 youtube 频道创建表单: https://www.youtube.com/watch?v=zfqQ_fhmPOQ 要么 https://www.youtube.com/watch?v=40njRXr6eUo 或者我什至尝试了这样一个非常简单的代码

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

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

【问题讨论】:

  • 现在这是一个非常不同的错误。添加该集合的代码author

标签: .net blazor


【解决方案1】:

这是罪魁祸首:

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

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

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

你应该像下面这样实例化你的对象:

你可以这样做:

   @code {
       Author author = new Author();
       public class Author
       {
          public string FirstName {get; set;} = "Charls"; 
        }
   }

运行示例:

    <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";
    }
}

希望这会有所帮助...

【讨论】:

  • 我的代码中有它。让我把我的 github 链接放在这里给你看所有代码github.com/maxrena/BlazorServerApp.git
  • 我不确定我是否理解您的意思...您的意思是您的代码与我的相似,但仍然无法正常工作吗?您是否发布了指向您的应用程序的链接,以便我可以更仔细地调查这个问题。请解释...
  • 我的意思是,我已经发起了作者,但方式不同。我希望您可以查看我的代码,告诉我有什么不同。因为我正在学习这个,我希望我能明白什么是什么。
  • @maxrena,您阅读我的回答并理解我的解释了吗?我查看了你的代码。不,您没有启动或实例化作者。您刚刚创建了 Author 类型的公共属性,它最初返回 null 值。我不建议使用属性,尽管这很好。无论如何,执行以下操作可以解决问题: public Author author { get;放; } = 新作者();这相当于我在上面的回答中所做的:作者 author = new Author();
  • 在我的回答中,标题“这是罪魁祸首:”下的代码不是我的。此代码 sn-p 来自 EditForm 类定义。它检查用户是否提供了 Model 对象或 EditContext 对象(您可以使用 EditContext 代替 Model,具体取决于您的设计和需要)。现在,如果您的 Model 为空,这是因为您没有实例化它,并且您没有定义 EditContext,您会收到异常 InvalidOperationException(请参见上面的代码)...即使是文本消息,您现在也应该很熟悉了。
【解决方案2】:

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

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

【讨论】:

  • 正确 - 如果您的表单的一部分来自异步操作,您必须检查数据是否为空。
猜你喜欢
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多