我试着做多个盒子. 我有一个错误说不能从void转换为对象. 这是我第一次和Blazor在一起. 我哪里做错了?

我的 Select list —

<form method="post" action="">
      
       Groups<br />
       <select @bind="groups">
        @for (int i = 1; i <= 16; i++)
        {
            <option value="@i">@i</option>
        }
       </select>
</form>

       <p>Selected Value: @groups</p>

运行该方法

     <div>
         @makeGroups()
     </div>

    @code{

       int groups = 1;

       void makeGroups()
       {
          for (int i = 1; i <= groups; i++)
          {
        
            <div class="leftBox">

            </div>

            <div class="middleBox">

            </div>

            <div class="rightBox">

            </div>
      }
    }

推荐答案

有多种方法可以达到你想要的效果.我会列出几个选项/ idea .

  1. 第一个 Select 是在html部分中使用for循环:
<form method="post" action="">
        
    Groups<br />
    <select @bind="groups">
        @for (int i = 1; i <= 16; i++)
        {
            <option value="@i">@i</option>
        }
    </select>
</form>

<p>Selected Value: @groups</p>

<div>
    @for (int i = 1; i <= groups; i++)
    {
        <div class="leftBox">    
        
        </div>

        <div class="middleBox">

        </div>

        <div class="rightBox">

        </div>
    }
</div>

@code {

    int groups = 1;
}
  1. 您可以在单独的blazor组件中添加for循环.

例如:GroupsComponent.razor:

@for (int i = 1; i <= NumberOfGroups; i++)
{
    <div class="leftBox">

    </div>

    <div class="middleBox">

    </div>

    <div class="rightBox">

    </div>
}

@code {
    [Parameter] 
    public int NumberOfGroups { get; set; }
}

这样使用:

<form method="post" action="">

    Groups<br />
    <select @bind="groups">
        @for (int i = 1; i <= 16; i++)
        {
            <option value="@i">@i</option>
        }
    </select>
</form>

<p>Selected Value: @groups</p>

<div>
    <GroupsComponent NumberOfGroups="groups" />
</div>

@code {

    int groups = 1;
}
  1. 你可以创建一个返回RenderFragment的方法,类似于你的初始代码.(不推荐,导致代码不干净):
<form method="post" action="">

    Groups<br />
    <select @bind="groups">
        @for (int i = 1; i <= 16; i++)
        {
            <option value="@i">@i</option>
        }
    </select>
</form>

<p>Selected Value: @groups</p>

<div>
    @MakeGroups()
</div>

@code {
    
    int groups = 1;

    private RenderFragment MakeGroups()
    {
        return (__builder) =>
        {
            for (int i = 1; i <= groups; i++)
            {
                <div class="leftBox">

                </div>
    
                <div class="middleBox">

                </div>
    
                <div class="rightBox">

                </div>
            }
        };
    }
}

Csharp相关问答推荐

Autofac:如何防止丢弃通过ServicCollection注册的服务?

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

等待限制选项似乎不适用于频道

子组件:如何根据另一个组件的状态启用输入

AutoMapper -如何为两个不同的用例设置单个映射?

EF Core. Income和. AsNoTracking正确用法

属性getter和setter之间的空性不匹配?

从应用程序图API调用访问所有者字段

在路由中使用枚举

使用可信第三方的Iext8.Net pdf签名

ASP.NET配置kestrel以使用Windows证书存储中的HTTPS

异步等待Foreach循环中的ConfigureAWait(FALSE)执行什么操作?

如何在.NET AOT中为所有枚举启用JsonStringEnumConverter

在.NET8中如何反序列化为私有字段?

Maui:更改代码中的绑定字符串不会更新UI,除非重新生成字符串(MVVM)

C#中COM对象的实际地址

Cmd中的&ping.end()";有时会失败,而";ping";总是有效

嵌套Blazor组件内的验证

客户端/服务器RPC如何处理全局变量?

反编译源代码时出现奇怪的字符