Open zxyao145 opened 11 months ago
CompilerFeatures.Register(builder);
conditionally adds features depending on the language version. What version do you have set in config
CompilerFeatures.Register(builder);
conditionally adds features depending on the language version. What version do you have set inconfig
CompilerFeatures.Register(builder);
根据语言版本有条件地添加功能。你设置config
了什么版本
RazorLanguageVersion.Latest
.
var config = RazorConfiguration.Create(
RazorLanguageVersion.Latest,
configurationName: "Blazor",
extensions: Array.Empty<RazorExtension>());
_projectEngine = RazorProjectEngine.Create(config, fileSystem, builder =>
{
builder.SetRootNamespace(options.RootNamespace);
builder.AddDefaultImports(options.DefaultImports);
CompilerFeatures.Register(builder);
builder.Features.Add(new CompilationTagHelperFeature());
builder.Features.Add(new DefaultMetadataReferenceFeature
{
References = _references
});
});
And amazingly, for Blazor components, events can be handled correctly:
I have found the reason, @using Microsoft.AspNetCore.Components.Web
must be added to the default import, or appear in the code like this:
+ @using Microsoft.AspNetCore.Components.Web
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
I have another problem. I'm using similar code as the author, specifically this: https://github.com/MudBlazor/TryMudBlazor/blob/main/src/Try.Core/CompilationService.cs
However, the new bindings @bind:get
, @bind:set
, @bind:after
do not work.
<h1>Bind Get Set Examples</h1>
<h2>Elements</h2>
<input type="text" @bind:get="text" @bind:set="(value) => { text = value; }" />
<input type="text" @bind:get="text" @bind:set="Set" />
<input type="text" @bind:get="text" @bind:set="SetAsync" />
@text
@code {
private string text = "test";
private void Set(string value)
{
text = value;
}
private Task SetAsync(string value)
{
text = value;
return Task.CompletedTask;
}
}
The issue is that while the code compiles, the bindings do not work. However, it works fine in a normal Blazor project. Does anyone have an idea of what might be missing? All the necessary using
statements seem to be in place and the library versions are the latest.
However, the new bindings
@bind:get
,@bind:set
,@bind:after
do not work.
I see that the ComponentBindLoweringPass
is added, which I believe is responsible for that feature. This makes me even more confused about why it doesn't work.
Hi, I try using Microsoft.CodeAnalysis.Razor compiles Razor code, but it does not take effect for native element events. What is the reason for this?
the RazorProjectEngine:
razor source:
the generate c# code:
and the Rendered results: