我在 Visual Studio 2022 中有一个 Web 应用解决方案,构建过程至少需要 5 分钟,我需要一种方法来加快构建速度。该解决方案中有一个包含 EF Core 迁移的数据项目,我猜测是迁移的数量(目前已接近 1000 个)导致了构建速度缓慢。有没有一种简单的方法可以将迁移命名空间从构建操作中排除?或者,我还可以对迁移采取其他什么措施来减轻它们对构建时间的影响?
我正在开发针对 .NET 9 的 Blazor WASM(独立)应用程序中的自动完成组件版本。
我能够使用以下代码将 绑定input
到string
变量并在用户输入其搜索关键字时采取行动,并且它工作正常,但是当我尝试将自动完成的 UI 移动到组件中时,将 绑定到我的变量似乎不起作用。该部件继续正常工作,并且我在每次击键后都会点击我的方法。@bind:after
input
bind:after
这是运行良好的代码,然后我将其移入一个组件:
...
<input @bind="UserInputText" @bind:event="oninput" @bind:after="OnUserInputChanged" />
...
@code {
private string? UserInputText = "";
private void OnUserInputChanged()
{
// Process user input and make suggestions
}
}
然后,我将 UI 部分放入我正在创建的新组件中,以将自动完成功能封装到其自己的组件中。
这是父代码:
...
<AutoComplete UserInputText="UserInput" UserInputTextChangedHandler="OnUserInputChanged" />
...
@code {
private string? UserInput = "";
private void OnUserInputChanged()
{
// Process user input and make suggestions
}
}
以下是组件内部的代码AutoComplete
:
@typeparam TItem
<div>
<input @bind="UserInputText" @bind:event="oninput" @bind:after="UserInputTextChangedHandler" />
</div>
@code {
[Parameter]
public string? UserInputText { get; set; }
[Parameter]
public Action UserInputTextChangedHandler { get; set; }
[Parameter]
public List<TItem> Suggestions { get; set; }
}
顺便说一句,我尝试使用EventCallback
而不是Action
传递OnUserInputChanged
给自动完成组件,但随后收到一条错误,指出:
参数 1:无法从“Microsoft.AspNetCore.Components.EventCallback”转换为“System.Action”
还请记住,OnUserInputChanged
即使我将该逻辑放入新组件中,接线实际上仍能正常工作。不再起作用的部分是绑定UserInputText
到input
组件内部。
我哪里犯了错误?
我的 Blazor WASM 独立应用程序(针对 .NET 9)中有一个简单的应用程序select
,我想在用户选择一个选项后执行一些操作。我了解对于async
调用,Microsoft 现在建议使用bind:after
。
我按照这个视频DoSomething()
操作,并按照他在教程中所做的操作,但在我的例子中,我没有达到我在代码中设置的方法中的断点。我在这里做错了什么?
<div>
<select @bind="SelectedState" @bind:after="DoSomething">
<option value="">Please select one</option>
<option value="AK">Alaska</option>
<option value="MT">Montana</option>
<option value="WY">Wyoming</option>
</select>
</div>
@code {
private string SelectedState;
private async Task DoSomething()
{
var userSelected = SelectedState; // Have a break point here but don't hit it
}
}
当我创建新的 Blazor Web App 时,服务器和客户端项目都包含一个 program.cs 文件,正如预期的那样。我是否需要在两个 program.cs 文件中配置依赖项容器,一次在服务器项目中,一次在客户端项目中?
我已经将容器添加到两个文件中,但似乎有很多代码重复。是否有一个项目结构只需要将容器放在一个地方,而不管它们被注入到哪里。我正在使用 Clean Architecture。
我最初将所有容器都放在服务器项目中,但出现了“没有注册服务”的错误,如果我将它们全部放在客户端项目中,也会出现同样的错误。
我肯定做错了什么,对吧?
需要一些帮助。Razor 组件的新手。我有一个托管发票的 Razor 页面,其中的一个子部分是付款。我创建了一个 Razor 组件来处理付款并更新名为 CurrentModel 的属性。我想返回对实例化 Razor 组件的 Razor 页面所做的更改。我想我可以通过将组件参数设置为方法来做到这一点(基于https://learn.microsoft.com/en-us/aspnet/core/blazor/components/event-handling?view=aspnetcore-9.0#eventcallback)。
成分:
[Parameter]
public EventCallback<List<Partial>> TestCallBack { get; set; }
然后稍后在组件中:
private async Task SetAmount(ChangeEventArgs e, int paymentId)
{
var amount = e.Value.ToDecimal();
if (amount.HasValue)
{
CurrentModel = CurrentModel.SetAmount(paymentId, amount.Value, Validator);
}
await TestCallBack.InvokeAsync(CurrentModel);
}
Razor Page 中的组件声明:
<component type="typeof(Components.Invoices.Payments)" render-mode="ServerPrerendered" param-testcallback="@Model.ReturnCallBack" />
(也尝试过)
<component type="typeof(Components.Invoices.Payments)" render-mode="ServerPrerendered" TestCallBack="@Model.ReturnCallBack" />
public async Task ReturnCallBack(List<Partial> partials)
{
...
}
无论哪种方式,VS 都会告诉我:
将方法组“ReturnCallback”转换为非委托类型对象。您是否打算调用该方法?
答案当然是肯定的,我确实希望调用该方法,但我不知道如何让该方法一直有效。上面的内容似乎使委托无效。
我的方法不是标准方法吗?我是否应该遵循其他方法?
我期望这种方法能够奏效,但是有些事情阻碍了委派。
当使用 EF Core DB 优先方法时,默认视图不显示主键。如何控制视图中显示哪些数据?
我搜索了模板和生成的代码。我搜索了 EF Core 教程和示例。
我刚刚创建了一个新的 .net blazor web 应用项目并添加了此代码
@page "/weather"
@attribute [StreamRendering] @rendermode InteractiveServer <PageTitle>Weather</PageTitle>
<h1>Weather</h1>
@using System.Diagnostics
<h3>Dropdown Example</h3>
<select @bind="SelectedSet" class="form-select">
<option disabled selected value="">-- Select a Set --</option>
@foreach (var set in Sets)
{
<option value="@set">@set</option>
} </select> <p>You selected: @SelectedSet</p>
<div class="mb-3">
<label for="SetType" class="form-label">Set Type</label>
<InputSelect id="SetType" @bind-Value="CollectionSet" class="form-select">
@foreach (var set in Sets)
{
<option value="@set">@set</option>
}
</InputSelect> </div> <p>You selected: @CollectionSet</p>
@code {
private List<string> Sets = new List<string> { "Pad", "Leather", "Bronze" };
private string SelectedSet { get; set; }
private string CollectionSet { get; set; }
private void OnSetChanged(ChangeEventArgs e)
{
Debug.WriteLine($"Selected value changed to: {SelectedSet}");
// Additional logic can be added here
} }
但是当我在方法上设置断点时,它就是不起作用。我不明白为什么事件没有触发。起初我使用枚举,我以为是因为这个原因,但对于一个简单的字符串,它仍然不起作用
我们正在使用 MS 为 ASP.NET Core API 应用程序提供的全新 OpenAPI 开箱即用支持,但在生成 json 的方式上遇到了一些问题。我们有以下类型:
public class MsgMovimentacaoLocaisTrabalho {
public IList<InfoGeral>? LocaisRemover { get; set; }
public InfoGeral? LocaisAssociar { get; set; }
}
public class InfoGeral {
public Guid GuidDirecao { get; set; }
public IEnumerable<int> Locais { get; set; } = Enumerable.Empty<int>();
}
MsgMovimentacaoLocaisTrabalho
用作控制器方法之一的参数类型:
public async Task<IActionResult> MovimentaLocaisTrabalhoAsync(
[Description("Mensagem que ....")]MsgMovimentacaoLocaisTrabalho msg,
CancellationToken cancellationToken) {
...
问题在于类型的输出:
...
"MsgMovimentacaoLocaisTrabalho": {
"type": "object",
"properties": {
"locaisRemover": {
"type": "array",
"items": {
"$ref": "#/components/schemas/InfoGeral"
},
"nullable": true
},
"locaisAssociar": {
"$ref": "#/components/schemas/InfoGeral2"
}
}
},
"InfoGeral": {
"type": "object",
"properties": {
"guidDirecao": {
"type": "string",
"format": "uuid"
},
"locais": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
}
}
},
....
"InfoGeral2": {
"type": "object",
"properties": {
"guidDirecao": {
"type": "string",
"format": "uuid"
},
"locais": {
"$ref": "#/components/schemas/#/properties/locaisRemover/items/properties/locais"
}
},
"nullable": true
},
首先,查看InfoGeral
架构,它看起来不错(locais
表示为 的数组int
),但我不确定为什么会有类型InfoGeral2
。我假设这是因为该类型MsgMovimentacaoLocaisTrabalho
有 2 个引用该类型的属性...
第一个问题:有没有办法让这两个属性的架构重用InfoGeral
?
问题 2:为什么我最终得到的是错误的值locais
而不是数组?IEnumerable 不应该在架构上生成数组吗?
顺便说一句,这是错误:
Semantic error at components.schemas.InfoGeral2.properties.locais.$ref
$ref values must be RFC3986-compliant percent-encoded URIs
Jump to line 11623