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

Razor Page无文件选中/无导入项问题及复选框打印功能改造咨询

问题解答

1. Razor Page中出现“未选择文件”或“无导入项”提示的原因

  • 文件不存在或路径错误:代码中指定的Carton.txt文件未在目标路径下创建,或者路径拼接逻辑错误,导致无法读取文件。
  • 文件无有效数据:文件存在但内容为空,或首行之后没有可解析的数据行,最终ImportedCartonItems为空列表。
  • 读取逻辑缺陷:OnGet方法中reader.ReadLineAsync()未使用await等待,可能导致跳过首行后直接进入循环时读取失败;或者分割后的values长度不足,导致未将数据添加到列表中。
  • 异常提示不明确:读取过程中出现异常时,TempData["Message"]的错误信息未在页面正确展示,用户误将异常情况当作“无导入项”。

2. 代码修改实现复选框打印功能及相关提示问题

步骤1:修正PageModel逻辑

首先修正OnGet方法的异步写法(避免async void),并添加处理打印请求的Post方法:

public class CartonLabelModel : PageModel
{
    public List<CartonItems> ImportedCartonItems { get; set; }

    // 修正async void为async Task,符合Razor Page异步规范
    public async Task OnGet()
    {
        ImportedCartonItems = new List<CartonItems>();
        try
        {
            string filePath = Path.Combine(Directory.GetCurrentDirectory(), "Carton.txt");

            using (var reader = new StreamReader(filePath, Encoding.UTF8))
            {
                // 等待首行读取完成
                await reader.ReadLineAsync();

                while (!reader.EndOfStream)
                {
                    var line = await reader.ReadLineAsync();
                    var values = line.Split('\t');

                    // 增加长度判断,避免索引越界
                    if (values.Length >= 6)
                    {
                        var shipdate = DateTime.Parse(values[5]).Date;
                        var item = new CartonItems
                        {
                            ShipLocation = values[0],
                            ShipAddress = values[1],
                            DocNo2 = values[2],
                            TotalCarton = values[3],
                            CartonQty = int.Parse(values[4]),
                            ShipDate = shipdate,
                            IsSelected = false
                        };
                        ImportedCartonItems.Add(item);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            TempData["Message"] = $"读取文件错误: {ex.Message}";
        }
    }

    // 处理打印提交的Post方法
    public async Task<IActionResult> OnPostPrint()
    {
        // 筛选选中的项
        var selectedItems = ImportedCartonItems?.Where(x => x.IsSelected).ToList() ?? new List<CartonItems>();
        
        if (selectedItems.Any())
        {
            PrintCartonLabel(selectedItems);
            TempData["Success"] = "已打印选中的纸箱标签";
        }
        else
        {
            TempData["Message"] = "未选择任何打印项";
        }

        // 重新加载数据后返回页面
        await OnGet();
        return Page();
    }

    private void PrintCartonLabel(List<CartonItems> data)
    {
        foreach (var item in data)
        {
            // 执行打印逻辑
        }
    }
}

步骤2:修改Razor页面(cshtml)添加复选框和打印按钮

在页面中渲染复选框并创建提交表单:

@page
@model CartonLabelModel

@if (!string.IsNullOrEmpty(TempData["Message"]))
{
    <div class="alert alert-danger">@TempData["Message"]</div>
}
@if (!string.IsNullOrEmpty(TempData["Success"]))
{
    <div class="alert alert-success">@TempData["Success"]</div>
}

<form method="post" asp-page-handler="Print">
    <table>
        <thead>
            <tr>
                <th>选择</th>
                <th>发货地点</th>
                <th>发货地址</th>
                <!-- 其他列 -->
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model.ImportedCartonItems)
            {
                <tr>
                    <td><input type="checkbox" asp-for="@item.IsSelected" /></td>
                    <td>@item.ShipLocation</td>
                    <td>@item.ShipAddress</td>
                    <!-- 其他列数据展示 -->
                </tr>
            }
        </tbody>
    </table>
    <button type="submit">打印选中项</button>
</form>

关于提示问题

如果Carton.txt文件已成功读取并加载数据到页面,点击打印按钮时:

  • 若选中了至少一项:不会出现“未选择文件”或“无文件可导入”的提示,直接执行打印逻辑。
  • 若未选中任何项:会提示“未选择任何打印项”,该提示与文件导入无关,仅针对选中状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:43:14