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

ASP.NET Core Razor Pages中字符串转整数实现用户ID匹配问题

解决ASP.NET Core Razor Pages中用户名与VendorId的匹配问题

针对你遇到的用户名(如V003950,字符串类型)与VendorId(如3950,整数类型)无法匹配的问题,提供两种严谨的解决方案:

方法一:提取用户名数字部分转整数匹配

从用户名中去掉开头的V,通过安全转换将剩余部分转为整数后,与VendorId直接比较。这种方式能避免因用户名格式异常导致的运行错误:

@foreach (var item in Model.Files)
{
    // 提取用户名中的数字并安全转换为整数
    if (int.TryParse(User.Identity?.Name?.TrimStart('V'), out int userId) && userId == item.VendorId)
    {
        if (item.FileType == "Purchase Order")
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Number)
                </td>
                <td>
                    @if (item.Attachment != null)
                    {
                        <form asp-page-handler="Download" method="post" asp-route-id="@item.Id">
                            <input type="submit" class="btn btn-dark" value="Download">
                        </form>
                    }
                </td>
            </tr>
        }
    }
}

TrimStart('V')会移除用户名开头的所有V字符,int.TryParse确保转换失败时不会抛出异常,同时只有转换成功且数值匹配时才会执行后续逻辑。

方法二:格式化VendorId为字符串匹配(适配固定长度数字)

如果用户名的数字部分是固定长度(如V003950对应6位数字),可以将VendorId格式化为带前导零的字符串,再与去掉V的用户名做精确匹配:

@foreach (var item in Model.Files)
{
    var usernameWithoutV = User.Identity?.Name?.TrimStart('V');
    // 将VendorId格式化为6位带前导零的字符串(根据实际长度调整D后的数字)
    var vendorIdFormatted = item.VendorId.ToString("D6");
    
    if (usernameWithoutV == vendorIdFormatted && item.FileType == "Purchase Order")
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Number)
            </td>
            <td>
                @if (item.Attachment != null)
                {
                    <form asp-page-handler="Download" method="post" asp-route-id="@item.Id">
                        <input type="submit" class="btn btn-dark" value="Download">
                    </form>
                }
            </td>
        </tr>
    }
}

这种方式适用于用户名数字部分长度固定的场景,能确保完全匹配,避免部分字符匹配导致的错误。

不推荐使用Contains方法的原因

直接使用User.Identity?.Name?.Contains(item.VendorId.ToString())存在逻辑漏洞:例如VendorId=395时,会错误匹配用户名V003950,因为字符串包含395,但实际两者并不对应。因此这种方式不够严谨,不建议采用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:35:30