我正在通过一些ASP.NET MVC阅读工作,我有一个工作的Web应用程序,我将从WebForms迁移到MVC.我希望在此过程中获得的功能之一是,如果用户来自移动设备,则会返回简化视图.
我无法确定实现这种逻辑的最佳位置.我确信有一种比在每个返回视图的操作中为Browser.IsMobileDevice添加if/else更好的方法.我有什么样的选择呢?
我最近将一个项目从MVC 1升级到MVC 3,现在我正在尝试使用Razor.
在一个视图中,我有一个foreach代码块,但嵌套的if语句似乎不希望它前面的@.
我原来的代码是:
@foreach(var r in Model.Results)
{
string css = r.Result.Count() > 0 ? "fail" : "pass";
<p class="@css"><strong>@r.Description</strong></p>
@if(r.Result.Count() > 0)
{
<p>Count: @r.Result.Count()</p>
<table>
<thead>
<tr>
<th>ID</th><th>Title</th><th>Description</th>
</tr>
</thead>
<tbody>
@foreach(var e in r.Result) {
<tr><td>@e.Id</td><td>@e.Title</td><td>@e.Description</td></tr>
}
</tbody>
</table>
}
}
Run Code Online (Sandbox Code Playgroud)
我将在@if中遇到运行时错误:在"@"字符后面出现意外的"if"关键字.进入代码后,您不需要使用"@"作为"if"等构造的前缀.
如果我删除@代码运行正常.我期望需要@因为它前面的HTML.更令我困惑的是,在嵌套的foreach之前我确实需要@.这里有什么规则?
我有一个Web应用程序设置为针对Mobile Safari的主屏幕应用程序.我定义了一系列启动图像,它们可以在运行iOS 8的多个iPad和iPhone设备上完美运行.当我在运行iOS 9的设备上设置相同的应用程序时,图像不会出现.
我已经验证了图像在服务器上.我已经在iOS 8和iOS 9设备的主屏幕上删除了应用程序,强制退出Safari,清除缓存,然后将应用程序重新添加到主屏幕.这是作为一个完整性检查完成的,以确保不涉及缓存问题.
我已经回顾了适用于iOS 8的常用方法,看看是否存在可能仍然有效的变体,例如在以下位置找到的变体:
所有这些都让我回到了同样的问题.在运行iOS 8时,我会看到启动图像,但在运行iOS 9时它们不会出现.
还有其他人看到这个问题吗?如果使用运行iOS 9的主屏应用程序为您显示启动图像,您使用的<link>标签是什么?
以下是我目前运行良好的iOS 8运行配置:
<!-- STARTUP IMAGES -->
<!-- iOS 6 & 7 iPad (retina, portrait) -->
<link href="~/assets/images/startup/startup-1536x2008.png" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image">
<!-- iOS 6 & 7 iPad (retina, landscape) -->
<link href="~/assets/images/startup/startup-2048x1496.png" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)" rel="apple-touch-startup-image">
<!-- iOS 6 iPad (portrait) -->
<link href="~/assets/images/startup/startup-768x1004.png" media="(device-width: …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个将投影到DTO的查询,其中两个属性是int数组.由于投影中的ToArray()调用,我收到错误.
teams = context
.Teams
.Include("TeamDepartments")
.Include("TeamEmployees")
.Select(t => new TeamDto
{
sourceSystemId = t.TeamId,
name = t.Name,
manager = t.EmployeeIdTeamManager,
teamLead = t.EmployeeIdTeamLead,
employees = t.TeamEmployees.Select(te => te.EmployeeId).ToArray(),
departments = t.TeamDepartments.Select(td => td.DepartmentId).ToArray()
})
.ToList();
Run Code Online (Sandbox Code Playgroud)
对于两个int []属性的员工和部门,如何获取这些值?现在,我只是撤回团队列表,然后循环遍历它们以创建DTO.
我见过其他类似的问题,但解决方案似乎并不适合我.我怀疑我需要采取额外措施,因为我正在穿越一段关系.
我在 ASP.NET MVC 项目中使用 FluentValidation 库,从 UI 角度来看,它按预期工作。违反规则会显示正确的错误。
我有一个父类,它有一个验证器和一个集合属性,其中该类型有一个验证器。它在概念上与文档中描述的相同。
我有一个父类的验证器......
public class MyFormValidator : AbstractValidator<MyFormViewModel>
Run Code Online (Sandbox Code Playgroud)
...我有一个收藏MyFormViewModel...
public IList<ChildRow> ChildRowsAdded { get; set; }
Run Code Online (Sandbox Code Playgroud)
...我为该子类的集合创建一个验证器...
public class ChildRowValidator : AbstractValidator<ChildRow>
Run Code Online (Sandbox Code Playgroud)
...并且我在父验证器中使用该子验证器...
RuleFor(m => m.ChildRowsAdded).SetCollectionValidator(new ChildRowValidator());
Run Code Online (Sandbox Code Playgroud)
在编写一些单元测试时,我注意到这ShouldHaveValidationErrorFor并不能确认错误的存在。
_validator.ShouldHaveValidationErrorFor(x => x.ChildRowsAdded, model);
Run Code Online (Sandbox Code Playgroud)
我的测试中的那一行似乎没有看到错误。测试失败并显示消息
FluentValidation.TestHelper.ValidationTestException:预计属性 AllergyRowsAdded 出现验证错误。
如果我手动.Validate()查看结果,我会看到错误。
以前有人遇到过这个吗?ShouldHaveValidationErrorFor在这种情况下我需要采取额外的步骤吗?
是否还有其他人在针对iOS 13模拟器或设备的Xcode 11上运行Xcode UI测试时遇到问题,在其中查找UIActivityViewController上的按钮会导致崩溃?
我有多个UI测试,用于验证UIActivityViewController中显示的按钮。他们完成了预期的设置工作,然后使用类似以下内容的按钮进行查找:
XCTAssertTrue(app.buttons["Copy"].exists)
Run Code Online (Sandbox Code Playgroud)
这些测试在iOS 10、11和12上运行良好。如果我尝试在iOS 13模拟器或设备上运行相同的测试,那么当代码尝试访问app.buttons时,执行停止,我将得到一个Thread 1: signal SIGABRT跟随Failed to get matching snapshots: Lost connection to the application (pid 33047).在我尝试访问app.buttons的那一行。
添加等待甚至是老式的睡眠都无济于事。我试图挖掘其他一些悬而未决的查询,XCUIElementTypeQueryProvider以找到没有运气的元素。
如果我调试测试并在测试访问app.buttons之前放置一个断点,并且尝试打印出其中包含的内容,则会收到不同的错误消息。
po app.buttons
t = 49.37s Requesting snapshot of accessibility hierarchy for app with pid 37576
expression produced error: error: /var/folders/f2/zhwz28mn1hd815pc78kg02q80000gp/T/expr5-3b2971..swift:1:72: error: 'XCUIElementQuery' is not a member type of 'XCTest'
Swift._DebuggerSupport.stringForPrintObject(Swift.UnsafePointer<XCTest.XCUIElementQuery>(bitPattern: 0x10c73f4d0)!.pointee)
Run Code Online (Sandbox Code Playgroud)
这肯定感觉像Xcode错误。还有其他人遇到吗?
如果有人想尝试一下,这里有一些代码。
从视图控制器:
po app.buttons
t = 49.37s Requesting snapshot of accessibility hierarchy for app with pid 37576 …Run Code Online (Sandbox Code Playgroud) 我们其中一个数据库的用户正在尝试向SQL Server 2005数据库提交UPDATE查询,并且文本意外被截断.
被截断的字段是VARBINARY(MAX),用于存储HTML文本.
查询大致是:
UPDATE Story
SET mainText = CONVERT (VARBINARY (MAX), '[...5000 chars of text...]'
+ char(47) + char(47)
+ '[...3000 chars of text...]'
+ char(47) + char(47)
+ '[...5000 chars of text...]')
WHERE storyId = 123456
Run Code Online (Sandbox Code Playgroud)
我在一些实验后发现的是,当我删除字符串连接时,查询按预期工作,并且字段不会被截断.
我能够通过将每个单独的字符串包装在CAST到VARCHAR(MAX)中来解决限制并保持连接,因此如果用户觉得需要使用char(),则有一个选项.
我认为,无论何时使用连接运算符,都会发生VARCHAR的隐式转换,并且隐式转换似乎仅限于VARCHAR(8000)而不是VARCHAR(MAX).因此,在将字符串发送到CONVERT函数之前,它已经被截断为8000个字符.
如果我是对的,有没有办法改变这种行为?
如果没有办法改变行为,除了CAST之外还有另一种方法可以解决这个问题吗?
在C#3.0中,当我以下面的方式将一个字符串数组传递给一个方法时,我将保留它定义它们的顺序,还是存在顺序可以改变的条件?这是否记录在某个我没见过的地方?
CalculateOmniturePageName(new[] { Model.GetOmnitureDomain(), Model.SectionTitle, Model.Title })
Run Code Online (Sandbox Code Playgroud) 我有一个场景,我需要从HealthKit中检索多组数据 - 体温,体重和血压.在我可以继续处理之前,我需要全部3,因为它们最终将以PDF格式结束.
我的天真第一种方法是运行一种,然后在HKSampleQuery的resultsHandler中调用第二种方法,然后在结果中调用第三种方法.感觉有点 - 我不知道 - 感觉我错过了什么.
是否有更好的方法或天真的方法是否合理?
ASP.NET WebForms跟踪输出有一个Application State部分.是否可以使用Glimpse看到相同的内容?
在我的家庭控制器的Index()方法中,我尝试添加一些测试值,但我没有在任何Glimpse选项卡中看到输出.
ControllerContext.HttpContext.Application.Add("TEST1", "VALUE1");
ControllerContext.HttpContext.Cache.Insert("TEST2", "VALUE2");
Run Code Online (Sandbox Code Playgroud)
我也没有在文档中看到任何内容.