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

Blazor动态创建文本输入列表并绑定值的实现问题

解决Blazor动态输入框绑定问题

问题根源

你碰到的错误是因为foreach循环里的迭代变量(也就是这里的qitem)是只读状态,而Blazor的双向绑定(@bind)需要可赋值的变量,直接绑定迭代变量自然会报错。

解决方案

要实现国家与对应城市的绑定,你得创建一个关联国家名和城市名的模型类,用这个类的实例来存储每组数据,替代原来单纯的字符串列表。

步骤1:定义数据模型

在组件类里添加一个简单的模型类,用来关联国家和城市:

public class CountryCityPair
{
    public string CountryName { get; set; }
    public string CityName { get; set; }
}

步骤2:替换原列表为模型列表

把原来的List<string> CountryNames换成List<CountryCityPair>,并初始化数据(可以从你的原国家列表转换):

private List<CountryCityPair> CountryCityList = new List<CountryCityPair>();

protected override void OnInitialized()
{
    // 替换成你实际的国家数据源
    var originalCountries = new List<string> { "中国", "美国", "日本", "德国" };
    CountryCityList = originalCountries.Select(c => new CountryCityPair { CountryName = c }).ToList();
}

步骤3:生成可绑定的动态输入框

在Razor部分遍历CountryCityList,绑定每个实例的CityName属性,同时用CountryName作为输入框标签:

@foreach (var item in CountryCityList)
{
    <div class="mb-3">
        <label>@item.CountryName:</label>
        <input type="text" @bind="@item.CityName" class="ms-2" />
    </div>
}

<!-- 可选:添加按钮测试获取输入数据 -->
<button class="btn btn-primary" @onclick="ShowInputCities">查看已输入城市</button>

@code {
    // 上述模型定义和初始化代码放这里
    private void ShowInputCities()
    {
        foreach (var pair in CountryCityList)
        {
            Console.WriteLine($"{pair.CountryName}对应的城市:{pair.CityName ?? "未输入"}");
        }
    }
}

为什么这个方案可行?

现在绑定的是CountryCityPair实例的CityName属性,这个属性是可读写的,完全满足Blazor双向绑定的要求。你可以随时遍历CountryCityList,直接获取每个国家对应的用户输入城市值。


内容的提问来源于stack exchange,提问作者Arun Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:55:31