我是一个非常缺乏经验的 C# 程序员,需要帮助来管理我的程序流程。它是一个 WinFormApp,需要多个用户输入,然后使用它们与设备建立串行通信以进行测量。测量采用异步方法进行,运行时间约为 20 分钟。所以我正在使用
void main()
{
//Setup
}
private void button1_Click(object sender, EventArgs e)
{
await measurements();
//Plot results
}
private async Task measurements()
{
while(true){
//Make some measurements
await Task.Delay(120000);
//Make measurements, present data in the UI form.
//return if done
}
}
Run Code Online (Sandbox Code Playgroud)
现在我需要制作一个按钮,使用户能够取消测量,以便更改某些输入或参数,然后重新启动测量。所以我添加了一个“取消”按钮。
private void button7_Click(object sender, EventArgs e)
{
textBox64.Enabled = true;
button6.Enabled = true;
button5.Enabled = true;
textBox63.Enabled = true;
button3.Enabled = true;
trackBar1.Enabled = true;
timer.Enabled = true;
button7.Enabled = false;
clearData(); …
Run Code Online (Sandbox Code Playgroud) 在回答了这个关于 ViewModel 是否仍然适用于 MVC Core 的问题后,我现在发现自己在 Blazor 中遇到了类似的问题。
我开始构建我的第一个复杂的 Blazor 页面,需要管理很多状态。页面元素将根据在页面其他部分输入的数据显示/隐藏和更新。
我过去曾与 React 和 Redux 合作过,并发现为所有状态拥有一个位置非常有价值,尤其是对于单元测试目的。
因此,我的计划是拥有一个视图模型,它不仅包含我将要保存到数据库中的数据,还包含潜在的标志,例如ShowSalesOrdersPanel
将if
在 razor 视图中的语句中使用的标志。
我的问题是,这个视图模型应该是一个单独的类,还是@functions
Blazor razor 文件的部分实际上是视图模型?我应该用那个代替吗?
现在Winforms已被移植到.NET Core 3,将使用什么技术来部署这些应用程序?也可以移植ClickOnce吗?
ClickOnce使用的许多属性当前都存储在.csproj文件中,但是那些项目文件在.NET Framework和.NET Core之间发生了显着变化,因此,大概这需要更改Microsoft的ClickOnce代码才能使其起作用?
微软对此是否有正式消息,我在文档中找不到任何内容?
我面临一个与用于文件上传的 Blazor 输入文件组件相关的小问题。
来源 - https://github.com/SteveSandersonMS/BlazorInputFile
Component Call -
<div class="form-control">
<InputFile OnChange="HandleFileSelected" />
</div>
Run Code Online (Sandbox Code Playgroud)
我能够使用此组件成功上传和删除文件。当我上传文件时,文件名显示在组件旁边,如下面的屏幕截图所示。
当我删除文件时,文件已成功删除,但文件名仍然显示在组件旁边。
我希望删除文件后应删除文件名。我尝试了几个选项,但没有运气示例 StateHasChanged();
是否可以只刷新特定组件?如何 ?
有人可以帮忙解决这个问题吗?(我不想使用javascript来实现解决方案)
我通过实体框架代码优先创建了一个表,主键设置为自动递增,但现在我想从列中删除该自动递增。我已经尝试使用流畅的 API 做到这一点:
public class ProductTypeMap: EntityTypeConfiguration<ProductType>
{
public ProductTypeMap()
{
// This is an enum effectively, so we need fixed IDs
Property(x => x.ProductTypeId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个注释:
public class ProductType
{
[Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ProductTypeId { get; set; }
public string ProductTypeName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,它们都生成相同的迁移代码:
public partial class removeproducttypeidentity : DbMigration
{
public override void Up()
{
DropPrimaryKey("dbo.ProductTypes");
AlterColumn("dbo.ProductTypes", "ProductTypeId", c => c.Int(nullable: false));
AddPrimaryKey("dbo.ProductTypes", "ProductTypeId");
}
public override void Down()
{
DropPrimaryKey("dbo.ProductTypes"); …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用System.IO.Abstraction项目和 System.IO.Abstraction.TestingHelpers 来模拟FileStream
.
这是使用我要测试的文件流的代码:
private readonly IFileSystem _fileSystem;
public void ExtractImageAndSaveToDisk(IXLPicture xlPicture, string filePath)
{
using (MemoryStream ms = new MemoryStream())
{
xlPicture.ImageStream.CopyTo(ms);
using (FileStream fs = (FileStream)_fileSystem.FileStream.Create(filePath, FileMode.Create))
{
ms.CopyTo(fs);
fs.Flush();
fs.Close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我设置测试的方式:
[TestMethod]
public void CheckFileIsSavedToDisk()
{
// Arrange
var mockFileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
{ @"c:\Test\Images\", new MockDirectoryData() },
});
var xlPicture = GetXLPicture();
var filePath = @"c:\Test\Images\myimage.jpeg";
var sut = new CostSheetImageExtractor(mockFileSystem);
// Act
sut.ExtractImagesAndSaveToDisk(xlPicture, filePath);
} …
Run Code Online (Sandbox Code Playgroud) 我刚刚将 MSTest .NET Core 单元测试项目添加到 VS 2019 中的解决方案中,但现在似乎没有任何功能可用于向该项目添加新的单元测试文件。
重现缺少上下文菜单问题的步骤:
我缺少该选项,该选项存在于早期版本的 VS 中(对于针对完整 .NET 框架项目的完整单元测试项目,该选项在 VS2019 中仍然存在):
重现缺少单元测试模板问题的步骤:
我认为问题可能是我没有为 VS2019 安装单元测试工作负载,但查看 VS2019 的 Visual Studio 安装程序中的“单独组件”选项,“测试工具核心功能”选项似乎也消失了:
我知道“创建单元测试”上下文菜单选项预计不会出现在 VS2019 中,但据我所知,正常的单元测试功能和模板应该存在吗?
(PS:我很感激我可以从头开始编写单元测试,我只是问VS中的功能是否已经改变)
我在同一解决方案中有一个完全可操作的Blazor服务器端项目和一个.NET Core 3 MVC项目。我现在正在尝试在我的MVC项目中使用Blazor项目中的组件。
我设法将组件呈现在MVC页面上,但是Blazor组件上的按钮单击不会触发组件的onclick事件,而是直接导航到https:// localhost:44341 /?
我不清楚我需要在MVC解决方案中进行哪些更改才能使其正常工作?官方文档讨论了在MVC项目中使用组件的问题,并且在与Dan Roth的视频聊天中提到了它,但是都没有详细介绍如何实现。
任何人都可以向我介绍如何将服务器端Blazor改造为MVC项目的完整步骤(或为我提供示例)吗?
我的Blazor项目仍然具有标准模板的Counter组件,因此我尝试通过引用Blazor项目并将其添加到我的MVC解决方案中,然后将其添加到我的index.cshtml文件中:
<div id="Counter">
@(await Html.RenderComponentAsync<Counter>())
</div>
Run Code Online (Sandbox Code Playgroud)
可以正确渲染,但单击按钮不起作用。
我已将JS文件添加到MVC应用程序的_Layout页面:
<script src="_framework/blazor.server.js"></script>
Run Code Online (Sandbox Code Playgroud)
在MVC项目的Startup.cs文件中打开“服务器端Blazor”:
services.AddServerSideBlazor();
Run Code Online (Sandbox Code Playgroud)
我还向MVC项目添加了Pages和Shared目录,并复制了_Imports和MainLayout文件-不确定是否需要这样做。
如果这样做没有做,我尝试从所有Blazor模板(客户端,客户端托管和服务器端)中分解新项目以寻找线索,但是所有这些示例都设置为具有单个Blazor的完整SPA。入口点(App
文件)托管在.html文件中,而我想在许多不同的现有MVC页面上呈现Blazor组件。
然后,我尝试将这些项目的一部分(以及我的Blazor项目的一部分)添加到MVC项目中,但是无法使其完全正常工作。
我也尝试按照这里的答案进行操作,但这是将Blazor组件文件添加到MVC项目中的工作,而我的Blazor文件当前(大多数情况下)在另一个项目中。
services.AddServerSideBlazor();
在MVC应用程序的Startup.cs中添加了。还有什么需要的吗?AspNetCore.Routing
,如果仅将组件放在现有的MVC页面上(我将没有Blazor页面,而只有Blazor组件),是否仍需要切换到Core 3的端点路由。 <app>@(await Html.RenderComponentAsync<App>())</app>
_Host.cshtml中的行放在我的MVC项目中的某个位置?我想知道是否可以通过继承 InputBase 并最好使用 Regex 来使用 Blazor 进行屏蔽输入?如果仅使用 C# 无法实现,那么 JavaScript 就可以了。我知道 Syncfusion 有付费组件,但我更喜欢免费的东西。任何 GitHub 存储库或指导/提示都很好!
我已经开始从我的 Blazor WebAssembly 应用程序中收到此错误:
Blazor 应用程序“无法读取空错误的属性‘_blazorFilesById’”
我假设这与我正在使用的InputFile
组件有关,它一直工作正常。
我试过重新启动 VS,清理和重建,重新启动 IIS 并杀死 Chrome 都无济于事。什么可能导致这种情况?
c# ×7
blazor ×5
.net-core ×2
unit-testing ×2
asp.net-core ×1
blazored ×1
clickonce ×1
exception ×1
file-upload ×1
goto ×1
mstest ×1
return ×1
winforms ×1