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

ASP.NET Core中为PageModel属性赋值并展示Excel导入数据

问题解决:在控制器中为PageModel属性赋值并展示Excel导入数据

一、当前代码的问题修正

你的控制器代码直接调用model.PhonenumbersFromExcel.AddRange(phonenumbersFromExcel)大概率会触发空引用异常——因为PageModel的PhonenumbersFromExcel属性默认是null,未初始化。

修正步骤:

  1. 初始化PageModel属性
    在PageModel的构造函数里提前初始化集合:

    public class YourPageModel : PageModel
    {
        public List<string> PhonenumbersFromExcel { get; set; }
    
        public YourPageModel()
        {
            PhonenumbersFromExcel = new List<string>();
        }
    }
    
  2. 控制器中正确赋值
    确认模型的集合已初始化后,替换原赋值逻辑(可按需清空原有数据再添加):

    // 替换原有的model.PhonenumbersFromExcel.AddRange(phonenumbersFromExcel);
    model.PhonenumbersFromExcel.Clear();
    model.PhonenumbersFromExcel.AddRange(phonenumbersFromExcel);
    

    注:如果你的Model是独立视图模型而非PageModel,需确保该模型的PhonenumbersFromExcel同样完成初始化,且返回视图时将模型传递给PageModel。

二、其他解决方案

方案1:用TempData临时存储(适配重定向场景)

你当前使用RedirectToAction做页面跳转,重定向会丢失当前请求的模型数据,可通过TempData暂存导入结果,在目标页面读取:

控制器修改:

// 替换model.PhonenumbersFromExcel.AddRange(phonenumbersFromExcel);
TempData["ImportedPhonenumbers"] = phonenumbersFromExcel;

Edit页面PageModel读取:

public class EditFestivalPageModel : PageModel
{
    public List<string> PhonenumbersFromExcel { get; set; }

    public async Task<IActionResult> OnGetAsync(int id)
    {
        PhonenumbersFromExcel = TempData["ImportedPhonenumbers"] as List<string> ?? new List<string>();
        // 其他业务逻辑...
        return Page();
    }
}

方案2:直接返回视图(无需跳转)

如果不需要跳转到Edit页面,而是在当前导入页直接展示数据,可跳过重定向,直接返回视图:

// 替换return RedirectToAction("Edit", new { id = currentFestivalId });
return View("YourImportView", model);

方案3:用ViewData传递数据

直接将导入数据存入ViewData,视图读取展示:

// 控制器中
ViewData["ImportedPhonenumbers"] = phonenumbersFromExcel;

// Razor视图中
@if (ViewData["ImportedPhonenumbers"] is List<string> numbers)
{
    <ul>
        @foreach (var num in numbers)
        {
            <li>@num</li>
        }
    </ul>
}

三、视图展示示例(基于PageModel属性)

@page
@model YourPageModel

<h3>导入的电话号码</h3>
@if (Model.PhonenumbersFromExcel.Any())
{
    <table class="table">
        <thead>
            <tr>
                <th>电话号码</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var number in Model.PhonenumbersFromExcel)
            {
                <tr>
                    <td>@number</td>
                </tr>
            }
        </tbody>
    </table>
}
else
{
    <p>暂无导入的电话号码</p>
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:55:19