我想实现这样的目标:
Time consuming operation...OK
Another time consuming operation...
And another one, but it completed, so...OK
Run Code Online (Sandbox Code Playgroud)
我显示了3行文本,每行都与一个可以迟早结束的帖子相关.但如果第二个比第三个完成,我会得到这样的东西:
Time consuming operation...OK
Another time consuming operation...
And another one, but it completed, so...OKOK
Run Code Online (Sandbox Code Playgroud)
这当然是不可接受的.我知道如何回到当前的路线,但有没有办法上线?我发誓我已经在某个地方见过它,虽然它可能是一个Linux控制台:)
算了吧.见远程文件管理器!它适用于Windows控制台,甚至可以在PowerShell中运行!怎么做这样的东西?最酷的部分是退出后恢复控制台状态.所以也许我应该问 - 如何直接访问控制台缓冲区?我假设我需要一些本机代码来完成这个技巧,但也许还有另外一种方法吗?我想到每次更新清除控制台,但这似乎有点矫枉过正.或许它不是?它会眨眼吗?
BL0005:不应在其组件之外设置组件参数。
我在一个组件中有一个组件。当我的外部组件状态发生变化时,我想更新内部组件的状态。外部组件是一个自动完成实现,改变的状态是输入文本,内部组件是自动完成项目列表,准确地说是突出显示的部分。
所以我通过它的参数改变了内部组件的状态。我收到了这个警告。为什么?
顺便说一句,代码完全按照我的预期工作。状态已同步,我匹配的文本在所有自动完成项目中突出显示。
我的猜测是更改参数可能会导致组件重新呈现自身,在我的情况下,这是完全期望和预期的行为。否则我为什么要在运行时更改组件的参数?
我在网上搜索了警告,但除了那个警告之外我没有发现任何有用的东西:https : //github.com/aspnet/AspNetCore/issues/12293
同样,看起来像我在代码中所做的那样修改参数是一种非常糟糕的做法,但同样,为什么?有没有理由我必须以不那么简单和直接的方式来做,或者有更简单和直接的方式来做到这一点?
考虑一个例子:
class Test {
string S { get; set; }
public Test() {
Init();
}
private void Init() {
S = "hello";
}
}
Run Code Online (Sandbox Code Playgroud)
使用可空 C# 项目功能,此示例将触发编译器警告:
警告 CS8618 退出构造函数时,不可为 null 的属性“S”必须包含非 null 值。考虑将该属性声明为可为空。
但是,退出构造函数时,该属性确实包含非空值,只是不是直接在构造函数中设置,而是在从构造函数无条件调用的方法中间接设置。
这个例子清楚地表明该属性不可能为S空。Test创建类的实例时,Init()将无条件调用该方法,因此该S属性始终设置为“hello”。
当然,这个警告可以在代码中被抑制,但这看起来很丑陋。这是告诉编译器我确实S在其他地方将该属性设置为非空值的更好方法吗?
顺便说一句,如果您真的想知道为什么要在构造函数中间接设置值,让我们考虑一下类型D的另一个派生属性Derived。要创建字符串的实例,Derived必须首先解析字符串,我们不想每次读取属性时都解析字符串D。
因此,更实际的代码看起来更像是这样的:
class Test {
public string S {
get => _S;
set => D = new Derived(_S = value);
}
public Derived D { …Run Code Online (Sandbox Code Playgroud) 也许只是尝试一下这个例子:
https://github.com/HTD/BlazorProfiles
这是一个演示 Blazor 应用程序(默认)。我创建了 2 个自定义应用程序配置文件:开发和生产。只需在 Visual Studio 中按 F5 键即可调试两者。
然后我创建了一个虚拟 Razor 组件库并将其命名为 RCL。我将其作为主项目的依赖项。在我的虚拟 RCL 中,wwwroot我在目录中添加了extra.css文件。该文件的作用是将背景颜色更改为浅绿色。如果发生这种情况 - 则意味着文件已被加载。如果背景保持灰色/白色,则不会加载。
这是_Host.cshtml加载 CSS 的片段:
<link href="_content/RCL/extra.css" rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)
尝试运行它。有用。但是,有一个条件:
ASPNETCORE_ENVIRONMENT环境变量必须设置为“Development”。
如果您测试Production配置文件(或将环境变量更改为“Production”),然后运行应用程序 - 该extra.css文件将不会被加载。
背景没有变成绿色,所以有问题。为什么会发生这种情况?这是 Visual Studio 中的错误吗?
如果您想知道为什么我需要设置此环境变量:它允许加载额外的
appsettings.[ASPNETCORE_ENVIRONMENT].json
文件。所以我可以为我的应用程序设置不同的配置。我需要使用不同的配置测试我的应用程序。现在我只能在 Visual Studio 中使用“开发”配置来调试它。当我将配置更改为其他任何内容时,我无法运行我的应用程序,因为它无法从库中加载组件所需的必要 JavaScript 文件。
因此,预期的行为:无论我在“ASPNETCORE_ENVIRONMENT”中放入什么 - 来自 RCL 的文件应该始终加载。为什么他们不应该呢?
实际行为:使用不同的配置(配置文件)会中断 Razor 组件库加载。
我确实尝试了谷歌和jQuery文档,我放弃了.
我需要事件名称.不 - 我不需要用代码加载它们,我需要它们作为HTML页面,你知道,阅读并检查我刚刚忘记的这个事件的确切名称.我敢肯定网上有隐藏的som笑我:)
对我(或任何人)来说,在这里问一下是没有意义的,"嘿,如何在jQuery.ajax启动时附加代码".我知道,jQuery .ajax()会触发一些全局和本地事件,我知道,如果我再浪费15分钟来阅读整个.ajax()文档,我会找到它,但这不是我的观点.如果您忘记了很少使用的HTML标记名称或语法,只需在Google中输入"HTML标记",然后在不到10秒的时间内找到您的标记.尝试使用jQuery事件名称:)"窗口事件"返回Microsoft的非常好的文档.
我宁愿把时间浪费在一个非常好的问题上:在哪里可以找到所有jQuery事件的列表?如果他们有某种描述会很酷,但最重要的是名字.
我不需要任何特别的一个.我需要在一个地方完成所有这些.
当涉及到"类方法和属性"时,它的脑力很容易.我知道代码可以定义任意数量的自定义事件,但首先:DOMDocument定义其默认值,JavaScript窗口定义自己的,jQuery本身定义自己的.有清单吗?
TextBox当用户触摸Enter虚拟键时,如何使其失去焦点并隐藏屏幕键盘?
private void TheName_KeyDown(object sender, KeyRoutedEventArgs e) {
var tb = sender as TextBox;
if (e.Key == Windows.System.VirtualKey.Enter) {
// ... tb.LooseTheFocus_PLEASE(); !???
}
}
Run Code Online (Sandbox Code Playgroud) 我最近发现,我可以相对容易地从 .NET 进行 Linux 系统调用。
例如,要查看我是否需要,sudo我只需签名如下:
internal class Syscall {
[DllImport("libc", SetLastError = true)]
internal static extern uint geteuid();
// ...
}
Run Code Online (Sandbox Code Playgroud)
public static bool IsRoot => Syscall.geteuid() == 0;
Run Code Online (Sandbox Code Playgroud)
整洁的。比其他一切都更容易和更快,对吗?这是最简单的系统调用,其他使用字符串和结构。
经过一番深入研究文档并自行测试后,我发现默认编组器libc可以将字符串 from 直接映射到stringfrom char*,大多数其他内容只需要使用一些手动映射IntPtr到结构的乐趣。
所以以类似的方式我快速绘制chmod了chown,,,,,,,, 。所有这些都在我的 Ubuntu VM 上进行了测试,有效。lchowngetgrnamgetpwnamgetuidsymlink
我什至制作了自己的超简洁Chmod实现,其工作方式与chmod接受相对权限(如u+wX. 并遍历文件系统。
这就是我失去一个晚上的地方。我需要原始权限,我读到可以通过调用获得它们stat。可能会出现什么问题?
首先,我使用手动文档
制作了Stat结构: https://man7.org/linux/man-pages/man2/stat.2.htmlLinux
然后我做了相应的extern。
第一个惊喜:找不到入口点。
我挖啊挖啊,又挖了一些。直到我打开 …
首先,我的JS:
class MyClass {
static myMethod() {
alert("TEST");
}
}
Run Code Online (Sandbox Code Playgroud)
我的 JS 运行时注入如下:
[Inject] protected IJSRuntime Js { get; set; }
Run Code Online (Sandbox Code Playgroud)
我想调用这样的静态方法:
Js.InvokeVoidAsync("MyClass.myMethod");
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
Microsoft.JSInterop.JSException:在“窗口”中找不到“MyClass”。
是否有一个理智、合理的方法来解决这个问题,或者仅通过将 window.MyClass = MyClass 添加到我的 JS 中?
我在现实世界的应用程序中有一个非常复杂的表单。事实上 - 许多复杂的形式使用复杂的数据。在多个地方使用不同的部分,这些部分具有我的表单所需的属性。所以它看起来像这样:
class FormData {
[ValidateComplexType]
public PropertyClass Feature { get; } = new PropertyClass();
[Required]
public string DirectProperty { get; set; }
}
class PropertyClass {
[Required]
public string NestedProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个如下所示的表单片段:
<TextInput @bind-Value="Input.DirectProperty" />
<TextInput @bind-Value="Input.Feature.NestedProperty />
Run Code Online (Sandbox Code Playgroud)
我想查看来自直接属性和嵌套属性的验证消息。它不适用于DataAnnotationsValidator.
我从直接属性中看到验证问题,但从嵌套属性中没有看到验证问题。但真正邪恶的是——有时我会从嵌套的消息中收到验证消息。只是有时,而不是在尝试使用提交按钮实际提交表单时。好的,它是可重现的:我输入一个有效值并按 Enter,我输入一个无效值并按 Enter 或 Tab。然后我会看到该消息,直到单击“提交”按钮。这种行为是疯狂的、出乎意料的和随机的。
所以微软的解决方案来了,来看看一个奇怪而特殊的包:
<PackageReference Include="Microsoft.AspNetCore.Blazor.DataAnnotations.Validation" Version="3.1.0-preview4.19579.2" />
Run Code Online (Sandbox Code Playgroud)
您不会在 Visual Studio 的 NuGet 面板中搜索它。它可能未被微软列出。
但是,有一个(当前?)文档指向它: https://learn.microsoft.com/en-us/aspnet/core/blazor/forms-validation ?view=aspnetcore-3.1
搜索文本“ValidateComplexType”或“ObjectGraphDataAnnotationsValidator”。
是的,他们承认它是实验性的,但首先 - 没有更新的版本,然后再说一次,它未列出。AFAIK 这是一个原因。
原因是它没有按预期工作,特别是在升级其他软件包之后。
首先,它似乎有效。我的嵌套属性已得到验证,那么问题出在哪里呢?单击几次后,我发现相同的随机行为,但这一次 - 我收到重复的验证消息。因此,第一种方法的意外随机行为会在另一个验证器中显现出来。
为了消除随机性并恢复理智的验证行为,我必须展平输入模型的层次结构。然后——就不会发生任何随机的事情。验证就可以了。问题是 - 我的应用程序有许多非常大且复杂的表单。我将不得不重写其中的很大一部分,以使随机行为消失。
ObjectGraphAnnotationValidator因此,这是一个严重的大问题: …
在默认的 Blazor 项目中,我们获取Pages/_Host.cshtml包含应用程序 HTML 模板之类内容的文件。
最近,我创建了我的第一个 Razor 组件库 (RCL),并且它可以工作。这是它的脚本部分:
<script src="_content/Woof.Blazor/js/woof.js"></script>
<script src="_content/Woof.Blazor/js/modal.js"></script>
<script src="_content/Woof.Blazor/js/input.js"></script>
<script src="_content/Woof.Blazor/js/datatable.js"></script>
<script src="_content/Woof.Blazor/js/autocomplete.js"></script>
Run Code Online (Sandbox Code Playgroud)
这些脚本手动包含在我的应用程序中。图书馆有没有办法自动将这些文件添加到应用程序模板中?顺便说一句,如果样式表也可以自动添加,那就太好了。
编辑:我只是尝试创建一个_Scripts.cshtml文件,但没有成功。Visual Studio 显示了很多奇怪的错误,可能是由于缺少包引起的,但我不知道。使脚本部分成为局部视图?它实际上并不是 MVC 的一部分。所以可能我错了。
我想要实现的是将上面的整个脚本部分替换为一行,包括我的库中的所有预定义和预配置的脚本。