对于我正在开发的项目,我们正在实现的一件事是我们的一些团队的旧ASP.NET和MVC项目中的代码 - 一个Application_Error例外捕获器,它向开发团队发送一封例外的电子邮件经验和最相关的细节.
以下是它的外观:
Global.asax中:
protected void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
string path = "N/A";
if (sender is HttpApplication)
path = ((HttpApplication) sender).Request.Url.PathAndQuery;
string args = string.Format("<b>Path:</b> {0}", path);
// Custom code that generates an HTML-formatted exception dump
string message = Email.GenerateExceptionMessage(ex, args);
// Custom code that sends an email to the dev team.
Email.SendUnexpectedErrorMessage("Some App", message);
}
Run Code Online (Sandbox Code Playgroud)
但是,一个"次要"问题 - 当我故意让部分代码抛出异常以便测试这种机制时......
public static void GetMuffinsByTopping(string topping)
{
throw new Exception("Test Exception!", new Exception("Test …Run Code Online (Sandbox Code Playgroud) 在Angular.js中对自定义客户端验证进行一些基础研究时,我正在阅读ngModel.NgModelController文档,并发现了以下隐藏线:
$ setValidity(validationErrorKey,isValid); 更改有效性状态,并通知表单.
可以在$ parsers/$ formatters中调用此方法.但是,如果可能,请使用旨在自动调用此方法的ngModel.$ validators管道.
几个小时后,许多Google(和StackOverflow!)搜索后来,我在任何ngModel.$validators地方都找不到任何关于此管道的信息.所有自定义验证示例都使用如下$parsers/$formatters设置:
link: function (scope, elem, attr, ctrl) {
// Other necessary logic...
ctrl.$parsers.push(function () {
// Validation logic
ctrl.$setValidity('validation-type', true);
});
ctrl.$formatters.push(function () {
// Validation logic
ctrl.$setValidity('validation-type', true);
});
},
Run Code Online (Sandbox Code Playgroud)
问题: Angular文档指出上述代码不是最佳实践,并且这个神秘的ngModel.$validatorspipline是正确的方法.我没有找到关于这种更好的做法的任何信息.如何使用ngModel.$validators正确实现此自定义客户端验证?
我遇到的问题是我无法在部分视图中触发客户端验证,在用户单击按钮后加载到div中.在这个例子中,我已经停止div"切换"以查看验证是否触发,但无济于事,没有任何反应.
幸运的是,该模型不接受任何无效输入,但它也不会警告用户实际的错误.任何帮助,将不胜感激.
这是我的模型:
public class Help
{
[HiddenInput(DisplayValue=true)]
public int HelpID { get; set; }
[Required(ErrorMessage = "Please enter a proper URL")]
public string URL { get; set; }
[Required(ErrorMessage = "Please enter a content description:")]
[DataType(DataType.MultilineText)]
public string HelpContent { get; set; }
/*? 2 properites are nullable*/
public DateTime? createDateTime { get; set; }
public DateTime? modifiedDateTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的控制器:
namespace HelpBtn.WebUI.Controllers
{
/*Create the admin controller*/
public class AdminController : Controller
{
//declare interface …Run Code Online (Sandbox Code Playgroud) 我最近开始探索lambda表达式,我想到了一个问题.假设我有一个需要不确定数量参数的函数.我会使用params关键字来建模可变数量的参数.
我的问题:我可以用Lambda表达式做类似的事情吗?例如:
Func<int[], int> foo = (params numbers[]) =>
{
int result;
foreach(int number in numbers)
{
result += numbers;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
如果是这样,两个子问题就出现了 - 是否有一种'好'的方式来编写这样的表达式,我甚至想在某个时候写出这样的表达式?
对于我支持的旧项目,我一直在进行一些现代化改造.这包括各种各样的事情:将.NET Framework提升到4.6,以及其他升级.我们有一些余地可以做的事情是进行语法升级,只要我们不改变业务逻辑.
我们最近还安装了Visual Studio 2015,以及最新最好的ReSharper,它揭示了"String Interpolation"现在是我们可以在代码中完成的事情.对于那些不知道的人,字符串插值是通过string.Format调用的语法糖,如下所示:
// Normal, pre-C#6 formatting:
var foo = string.Format("Some string {0}", bar);
// C#6 String Interpolation
var foo = $"Some string {bar}";
Run Code Online (Sandbox Code Playgroud)
这非常有用,因为它使消息更容易阅读,并且通常占用更少的字符.
......然而,TeamCity似乎不同意.当我在提交中推送代码时,我收到以下错误:
Directory\SomeFile.cs: error CS1056: Unexpected character '$' [C:\ProjectDirectory\Project.Core\Project.Core.csproj]
Run Code Online (Sandbox Code Playgroud)
从表面上看,似乎某种类型的前C#6构建器正在受到攻击,因为这是C#6的新功能.
这就是我所观察到的,这就是为什么我认为这是正在发生的事情:
构建配置指向C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 这让我暂停,因为可能是我们的构建代理上安装了.NET 4.6.
但是,尝试从Microsoft安装程序直接安装.NET 4.6时,它会失败,因为.NET 4.1已经安装在bulid代理上.
我们的构建配置的编译步骤也让我停下来.注意构建引擎和框架版本的前两行分别是[exec] Microsoft (R) Build Engine version 4.6.1055.0 [exec] [Microsoft .NET Framework, version 4.0.30319.42000] 构建引擎显然是v4.6,但.NET框架是4.0!我读得对吗?
最后,构建日志的最后一行:[NAnt output] External Program Failed: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe (return code was 1) 那不是 4.6 ......是吗?
问题: …
所以,我有一些看起来像这样的JavaScript/jQuery:
var $foo = $('#bar');
$foo.hide();
Run Code Online (Sandbox Code Playgroud)
我一直在假设jQuery对给定的选择器进行操作,并将生成的DOM元素保存到var $foo...中,据我所知,这是真的.
但是,调用是否$foo.hide()导致jQuery重新寻找#bar元素?
要启动:我刚开始用的正则表达式,和我有一个真正艰难的时间了解发生了什么事情他们.只是一个单挑.
对于一个项目,我正在尝试开发一个正则表达式,它采用A)空字符串(在C#speak,"")或B)十(10)位数.我已经弄清楚如何完成10位数的部分:
"^[0-9X]{10}$"
Run Code Online (Sandbox Code Playgroud)
......但不是'空串或'部分.我想这会是这样的:
"^[]$|^[0-9X]{10}$"
Run Code Online (Sandbox Code Playgroud)
显然,这是不行的,但我不知道如何写一些东西,确实,即使有对此事相当多的话题.
问题:
A)如果给定的字符串是string.Empty(而不是""),或者恰好是10位数,那么正则表达式将返回true?
B)请解释它究竟是如何工作的.这并不是说我没有尝试学习(我确实认为它们^$是精确字符串匹配的锚点,那|就是OR运算符...),这只是正则表达式显然不适合我. .yet,我遇到了必须使用它们的情况.
对于我正在从事的半教育副项目,我有一个 TypeScript interface,id它在实现它的任何对象上公开一个变量。在这个应用程序中,有Array<>s 个这些IIdable对象是相当普遍的。
由于这个应用程序不使用数据库,我正在尝试做的事情是为服务实现一个自动增量器,以跟踪这些IIdables列表。自然地,我考虑添加一个“JavaScript”方式的扩展,如下所示......
Array<MyProject.Models.IIdable>.prototype.getNextId = () => {
let biggestId: number = 0;
for (let current of this) {
if (current.id > biggestId)
biggestId = current.id;
}
return biggestId + 1;
};
Run Code Online (Sandbox Code Playgroud)
...但是 Visual Studio Code 抛出了几个错误,其中一个是:
Cannot find name 'prototype'
Run Code Online (Sandbox Code Playgroud)
我觉得这是有问题的,因为Array<T>s 是 JavaScript 的“原始”,并且所有东西都是objectJavaScript 中的(因此,TypeScript 的一些问题是为了减少或完全避免而创建的。)但是,我意识到我对两者都了解得够多了JavaScript 和 TypeScript 是“危险的”,这意味着我知道的事情足够多,可以让自己做一些非常愚蠢的事情。
如果我使用的是 C# - TypeScript 不是 - 我会编写这样的扩展方法:
public static GetNextId(this List<IIdable> source)
{
// ...Read …Run Code Online (Sandbox Code Playgroud) 在我正在进行的项目中,我有一些使用Inkscape生成的地图的视图.但是,我们遇到了一些小问题......具体来说,有些地图根本不会渲染文字.
在StackOverflow上对此问题进行了一些研究后,我发现有一些很好的理由:
flowRoot,flowRegion,和flowPara元件.我将我的地图更新为1.2版文档,但它没有帮助.flow*元素作为SVG 1.2标准的一部分,实际上并没有在大多数浏览器中实现,因为SVG 1.2从未被任何人接受.这就解释了为什么没有任何哄骗导致我们的地图上的文字出现.<text>而不是<flowPara>这揭示了一个更深层次的问题,我无法从Google搜索中找到答案:Inkscape正在填充文档,其中包含可以渲染的其他垃圾(以及分别),但IE/Chrome没有实现.flowRootflowRegion
问题:
flowRoot?flowRegion?对于我正在现代化的项目,我有一套由应用程序的原始开发人员提供的单元测试。在我的现代化改造早期,它们是完全绿色运行的。然而,它们已经变成红色,但大多数情况下都有相同的例外:
例外:
System.IO.FileLoadException: Could not load file or assembly 'MyApp.BusinessLayer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Access is denied.
at MyApp.SomeExecutable.SomeClass.SomeMethod(args)
at MyApp.UnitTests.SomeExecutableFixture.CanValidateSomething() in [place of invocation of SomeClass.SomeMethod]
Run Code Online (Sandbox Code Playgroud)
异常没有内部异常。
从我所看到的,这发生在任何引用MyApp.BusinessLayer程序集中定义的东西的方法中,友好的错误消息通知我无法加载......显然是由于拒绝访问。
我尝试了以下方法来访问程序集:
fuslogvw.exe,并在运行时运行测试以了解绑定过程。没有信息出现;就好像在 Visual Studio 2015 中运行测试对 Fusion Log Viewer 完全不可见!即使在重新启动后,Fusion Log Viewer 也没有关于正在发生的程序集绑定的信息。(感谢@AndrewAu、@CodeCaster)c# ×5
.net ×2
javascript ×2
angularjs ×1
asp.net ×1
asp.net-mvc ×1
closures ×1
generics ×1
jquery ×1
lambda ×1
msbuild ×1
razor ×1
regex ×1
svg ×1
teamcity ×1
typescript ×1
unit-testing ×1
validation ×1