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

如何在ASP.NET MVC中访问模型列表子类的FirstName变量?

正确访问DelegatesList中FirstName的方法

你的问题核心是直接把整个DelegatesList(一个List<OrderDelegate>集合)绑定到了单个输入框上,而输入框是用来处理单个值的,自然无法正确访问到FirstName属性。下面是具体的解决方法:

1. 遍历现有DelegatesList生成输入框

如果你的DelegatesList已经包含了要编辑的委托对象,优先用for循环(而非foreach)来遍历集合——因为MVC的模型绑定需要明确的索引来识别列表中的每个元素,才能在表单提交时正确映射值。示例代码如下:

<div class="basket-item-delegate__input-cell">
    @* 先判断集合是否为空,避免空引用异常 *@
    @if (Model.CustomerBasket.OrderLines[i].DelegatesList != null)
    {
        @for (int j = 0; j < Model.CustomerBasket.OrderLines[i].DelegatesList.Count; j++)
        {
            <div class="delegate-group">
                <h6>First Name:</h6>
                @Html.TextBoxFor(m => m.CustomerBasket.OrderLines[i].DelegatesList[j].FirstName)
                
                <h6>Last Name:</h6>
                @Html.TextBoxFor(m => m.CustomerBasket.OrderLines[i].DelegatesList[j].LastName)
                
                <h6>Email:</h6>
                @Html.TextBoxFor(m => m.CustomerBasket.OrderLines[i].DelegatesList[j].Email)
            </div>
            <hr />
        }
    }
</div>

为什么用for循环?

for循环会生成带索引的表单字段名,比如CustomerBasket.OrderLines[0].DelegatesList[0].FirstName,MVC框架能通过这个索引标识,精准将输入值映射回模型中对应的OrderDelegate对象。如果用foreach,Razor无法生成正确的索引标记,模型绑定会直接失效。

2. 提前初始化DelegatesList

在控制器的GET方法里,一定要提前初始化DelegatesList(甚至添加默认的空对象),否则页面会抛出空引用异常:

public ActionResult YourAction()
{
    var viewModel = new YourViewModel();
    
    // 初始化层级结构
    viewModel.CustomerBasket = new CustomerBasket();
    viewModel.CustomerBasket.OrderLines = new List<OrderLine>();
    
    // 给第一个OrderLine添加至少一个空的委托对象,确保页面能渲染输入框
    var targetOrderLine = new OrderLine
    {
        DelegatesList = new List<OrderDelegate>
        {
            new OrderDelegate()
        }
    };
    viewModel.CustomerBasket.OrderLines.Add(targetOrderLine);
    
    return View(viewModel);
}

3. 访问特定索引的FirstName

如果你只需要操作DelegatesList中某个固定位置的FirstName(比如第一个元素),可以直接用索引访问:

<h6>First Name:</h6>
@Html.TextBoxFor(m => m.CustomerBasket.OrderLines[i].DelegatesList[0].FirstName)

⚠️ 注意:必须确保DelegatesList的长度大于等于你使用的索引值,否则会触发ArgumentOutOfRangeException。

内容的提问来源于stack exchange,提问作者Paul Almond

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:35:59