我已经找遍了,也找不到答案,如果有任何帮助,我将不胜感激!

我在razor页面上有一个ForEach循环,它循环遍历约会列表,每个约会列表都有不同的 colored颜色 (我在调试器中观察了整个过程和值).但它只将所有循环的项呈现为Foreach循环中的最后一个 colored颜色 .

这是一个循环

@foreach (var a in appt.ToList())
{
   <ApptCard @key="a.Text" Text="@a.Text" BoxColor="@users.Where(x => x.Id == a.Id).FirstOrDefault().Color"/>
}

这是正在循环的卡片

@using System.Drawing

<style>
    .apptColor{
        background-color: @rgbaColor;
    }
</style>

<MudPaper Class="pa-2 apptColor">@($"{Text})</MudPaper>

@code {
    [Parameter] public string Text { get; set; } = null!;
    [Parameter] public string BoxColor { get; set; } = null!;
    private string rgbaColor;

    protected override Task OnInitializedAsync()
    {
            var color = ColorTranslator.FromHtml(BoxColor);
            int r = Convert.ToInt16(color.R);
            int g = Convert.ToInt16(color.G);
            int b = Convert.ToInt16(color.B);
            rgbaColor = string.Format("rgba({0}, {1}, {2}, {3});", r, g, b, .2);

        return base.OnInitializedAsync();
    }
}

colored颜色 来自数据库.

what's rendered

在图片中,第一个 colored颜色 应该是红色,第二个是棕色,第三个是绿色,第四个是红色.

推荐答案

剃须刀/css colored颜色 问题

您面临的问题是如何将CSS应用于Razor页面中的ApptCard组件.您使用的<style>标记并不局限于组件,而是全局应用于整个页面.因此,当您循环遍历卡片时,每次迭代都会全局更新.apptColor类.因此,每个ApptCard都以循环最后一次迭代的背景 colored颜色 结束.

要解决此问题,您需要以这样一种方式应用样式:每个ApptCard都可以不受干扰地拥有自己唯一的背景 colored颜色 .一种解决方案是将背景 colored颜色 直接包括在MudPaper组件中.这确保了每张卡都有自己的 colored颜色 ,而不会被以后的循环迭代覆盖.

以下是你的ApptCard人的修订版,可以做到这一点:

@using System.Drawing

<MudPaper Class="pa-2" style="background-color: @RgbaColor;">@($"{Text}")</MudPaper>

@code {
    [Parameter] public string Text { get; set; } = null!;
    [Parameter] public string BoxColor { get; set; } = null!;
    private string RgbaColor => GetRgbaColor(BoxColor);

    private static string GetRgbaColor(string hexColor)
    {
        var color = ColorTranslator.FromHtml(hexColor);
        int r = color.R;
        int g = color.G;
        int b = color.B;

        // Adjust this value if you want to
        double a = 0.2; 
        return $"rgba({r}, {g}, {b}, {a})";
    }
}

在修改后的代码中,rgbaColor计算现在包含在名为GetRgbaColor的方法中.此方法在MudPaper组件的样式属性中直接调用.因此,该块不再是必需的,并且每张卡片的背景 colored颜色 由其自己的BoxColor参数确定.这确保了每个ApptCard组件都是单独设置样式的,从而解决了所有卡片都使用循环中的最后一种 colored颜色 呈现的问题.

Csharp相关问答推荐

Rx.Net -当关闭序列被触发时如何聚合消息并发出中间输出?

需要更改哪些内容才能修复被覆盖的财产中的无效警告CS 8765?

C#中的包版本控制

使用特定格式的JsonConvert序列化对象

找不到网址:https://localhost:7002/Category/Add?区域= Admin.为什么我的URL是这样生成的?area = Admin而不是/Admin/

用C#调用由缓冲区指针参数组成的C API

在.NET核心项目中创建Startup.cs比在Program.cs中注册服务好吗?

单行上的ReSharper数据标注

如何使用MoQ模拟Resources GroupCollection?

为什么C#认为这个非托管 struct 有一个重叠

在swagger示例中添加默认数组列表

如果设置了另一个属性,则Newtonsoft JSON忽略属性

正在寻找新的.NET8 Blazor Web应用程序.如何将.js添加到.razor页面?

GODOT 4向C#中的字符串参数发送信号以等待

从Base64转换为不同的字符串返回相同的结果

C#如何获取字符串中引号之间的文本?

为什么Swashbakle/Swagger在参数中包含变量名?

C#中COM对象的实际地址

使用免费的DotNet库从Azure函数向Azure文件共享上的现有Excel文件追加行

C#If条件格式