You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor中EditForm不显示及代码报错问题求助

问题修复方案

1. 解决编译错误

你遇到的'int'不包含接受1个参数的构造函数错误,是因为值类型不需要用new关键字构造赋值。修改InsertItem方法中的对象初始化代码:

原错误代码:

ItemModel a = new ItemModel
{
    ItemName = new string(addItem.Name),
    Expiration = new DateTime(addItem.Expiration.Year, addItem.Expiration.Month, addItem.Expiration.Day, addItem.Expiration.Hour, addItem.Expiration.Minute, addItem.Expiration.Second),
    Quantity = new int(addItem.Quantity),
    Qtype = new string(addItem.Qtype)
};

修改后:

ItemModel a = new ItemModel
{
    ItemName = addItem.Name,
    Expiration = addItem.Expiration,
    Quantity = addItem.Quantity,
    Qtype = addItem.Qtype
};

2. 修复EditForm不显示/无法提交的问题

(1)统一表单绑定的Model

你的EditForm绑定的是newItem,但所有输入框绑定的是addItem,这会导致Blazor无法正确处理表单状态,甚至引发渲染异常。将EditForm的Model改为addItem:

<EditForm Model="@addItem" OnValidSubmit="@InsertItem">

(2)添加提交按钮

原表单没有提交按钮,用户无法触发提交操作,在EditForm内部添加按钮:

<button type="submit">添加食材</button>

(3)修正表单事件

OnInvalidSubmit仅在表单验证失败时触发,应使用OnValidSubmit(验证通过后触发),确保提交逻辑正常执行。

3. 修复SQL语句参数错误

你的SQL插入语句中,仅@ItemName是参数,其他字段未加@前缀,会被MySQL当成列名而非参数,导致插入失败:

原SQL:

string sql = "INSERT INTO item (ItemName,Expiration,Quantity,Qtype) VALUES (@ItemName,Expiration,Quantity,Qtype);";

修改后:

string sql = "INSERT INTO item (ItemName,Expiration,Quantity,Qtype) VALUES (@ItemName,@Expiration,@Quantity,@Qtype);";

4. 移除冗余代码

await OnInitializedAsync();和a = new ItemModel();属于冗余代码,直接清空addItem即可重置表单状态。

完整修正后的代码

@page "/addingredient"
@using DataAccess
@using BlazorApp.Models

@inject IMySQLDataAccess _data
@inject IConfiguration _config

<PageTitle>Add Ingredient</PageTitle>
<h1>Add Ingredient</h1>

<EditForm Model="@addItem" OnValidSubmit="@InsertItem">
    <label for="name">Ingredient Name</label>
    <input type="text" id="name" @bind-value="addItem.Name">

    <label for="exp">Expiration Date</label>
    <input type="datetime-local" id="date" @bind-value="addItem.Expiration">

    <label for="q">Quantity</label>
    <input type="number" id="q" @bind-value="addItem.Quantity">

    <label for="qt">Quantity Type</label>
    <input type="text" id="qt" @bind-value="addItem.Qtype">

    <button type="submit">添加食材</button>
</EditForm>

@code {
    private ItemModel newItem = new ItemModel();

    public class AddItem
    {
        public string? Name { get; set; }
        public DateTime Expiration { get; set; }
        public int Quantity { get; set; }
        public string? Qtype { get; set; }
    }

    private AddItem addItem = new AddItem();

    private async Task InsertItem()
    {
        ItemModel a = new ItemModel
        {
            ItemName = addItem.Name,
            Expiration = addItem.Expiration,
            Quantity = addItem.Quantity,
            Qtype = addItem.Qtype
        };
        string sql = "INSERT INTO item (ItemName,Expiration,Quantity,Qtype) VALUES (@ItemName,@Expiration,@Quantity,@Qtype);";
        await _data.SaveData(sql, a, _config.GetConnectionString("MySQLConnection"));
        addItem = new AddItem();
    }
}

另外注意:HTML中datetime类型输入框应改为datetime-local,这样浏览器会显示适配的日期时间选择器,更方便用户输入。

内容的提问来源于stack exchange,提问作者Oscar Petersen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:46:03