在查看我从Orchard CMS库中下载的主题时,我注意到Layout.cshtml文件在文件顶部有这个代码块:
@functions {
// To support the layout classifaction below. Implementing as a razor function because we can, could otherwise be a Func<string[], string, string> in the code block following.
string CalcuClassify(string[] zoneNames, string classNamePrefix)
{
var zoneCounter = 0;
var zoneNumsFilled = string.Join("", zoneNames.Select(zoneName => { ++zoneCounter; return Model[zoneName] != null ? zoneCounter.ToString() : ""; }).ToArray());
return HasText(zoneNumsFilled) ? classNamePrefix + zoneNumsFilled : "";
}
}
Run Code Online (Sandbox Code Playgroud)
我知道声明的函数做了什么(计算哪些区域被填充以返回每列的宽度),我的问题是 - @function块的正确使用是什么,我应该何时使用它?
不确定这是否适合SO的问题,但是这里是:
我感兴趣的是能够计算联盟中球队最高和最低完成位置所需的逻辑.
以英超联赛为例.这个联盟有20支球队.每支球队都会在主场迎战联盟中的其他球队.这意味着每支球队互相比赛两次(一次在主场,一次在外),因此一个赛季将打38场比赛.
游戏可以以三种结果中的一种结束 - 主场胜利,平局或客场胜利.球队获胜3分,平局1分.这意味着团队在一个赛季中可以获得的最高积分是114(38*3).
今年英超联赛桌的底部看起来像这样(位置,球队名称,比赛,比赛差异[进球得分 - 失球],分数):

我想知道纽卡斯尔最高和最低的完成位置.
认为纽卡斯尔本赛季的最低位置将是第18名,就好像纽卡斯尔输掉剩下的比赛一样是理性的,而且他们下面的所有球队(除了QPR和雷丁都不能抓住纽卡斯尔队)赢得他们的比赛,然后他们的积分总数将高于纽卡斯尔(维冈的比赛将会相同,但事实上他们将获得两场胜利,而纽卡斯尔将有一次失利将意味着维冈将拥有更高的目标差异[分离球队的机制]谁在平等点上]).
然而 -(这是复杂的一点) - 阿斯顿维拉本赛季的最后一场比赛是对阵维冈.因此,两支球队都无法获得最高分.
所以我的问题是 - 哪个是准确确定联盟中特定球队最高和最低可能完成位置的最佳方式,同时考虑到对手球队的剩余赛程?我应该只查看每个剩余的夹具并计算每个排列吗?或者有更聪明的方法吗?
这有点长啰嗦,但这里......
鉴于我有这样的界面:
public interface IWebClientHelper
{
TPayload Get<TPayload>(string url);
}
Run Code Online (Sandbox Code Playgroud)
其中实现Get调用提供的URL,它将返回包含类型的Json对象的响应TPayload,并将Json反序列化为TPayload然后返回.
我想使Get方法的实现异步(或者更具体地说,使Get方法中包含的HTTP调用异步),但据我所知,这将要求将Get方法的签名更改为:
Task<TPayload> Get<TPayload>(string url);
Run Code Online (Sandbox Code Playgroud)
我的目标是保持接口不变,所以我创建了第二个接口:
public interface IAsyncWebClientHelper
{
Task<TPayload> Get<TPayload>(string url);
}
Run Code Online (Sandbox Code Playgroud)
并将其注入我的实现中IWebClientHelper.所以现在我的实现IWebClientHelper看起来像这样:
public TPayload Get<TPayload>(string url)
{
return _asyncWebClientHelper.Get<TPayload>(url).Result;
}
Run Code Online (Sandbox Code Playgroud)
以及包含该行的Get方法_asyncWebClientHelper
message = await httpClient.GetAsync(url);
Run Code Online (Sandbox Code Playgroud)
所以我不清楚的是:我是否认为该行将return _asyncWebClientHelper.Get<TPayload>(url).Result阻止执行直到该方法返回?或者await该方法中的关键字是否会释放该线程,直到它收到来自网址的响应?
我想在每个SpecFlow测试的开头添加相同的行.
此行指定了一些随时间变化的场景列表,因此不可能为每个测试维护此列表.
例如:
Given I have set my site theme to <MyTheme>
|Theme Names|
|Theme 1 |
|Theme 2 |
|Theme 3 |
|Theme 4 |
|Theme 5 |
Run Code Online (Sandbox Code Playgroud)
我想对每个主题重复这个测试.主题列表不是一成不变的,应该保存在一个地方.
到目前为止,我已成功设法创建了一个Generator Plugin,我计划在生成测试类之前立即使用此插件来更改SpecFlow功能.但是,我无法在此上下文中看到编辑方案的方法.
是否可以从实现中获取和设置场景文本IUnitTestGeneratorProvider?
我没有开始使用这种方法,所以如果有人能提出更好的方法来做到这一点,那么我也会接受.
如果我得到一些错误的术语,我会道歉 - 我刚刚开始使用SpecFlow.
我正在添加这一部分,以澄清我实际上在追求什么.
假设我有一个包含800个测试的测试套件.我们有业务要求在每个可用主题上运行800个测试中的每一个.可用主题列表可以随时更改,并且将此列表保留在多个位置是不可行的.
所以,例如,如果我有以下两个测试:
例A:
Given I set context to < site >
Given I go to base url
When I type <username> in username field
When I type <password> in password field
When I click login button
Examples: …Run Code Online (Sandbox Code Playgroud) 让我清楚一点,因为问题本身可能看起来有点令人困惑:
我有一个模块 - 让我们调用这个模块AB module.该模块有2个功能-让他们打电话feature A和feature B.
这是一个示例模块清单文件:
Name: AB Module
AntiForgery: enabled
Version: 1.0
OrchardVersion: 1.0
Description: Test module with 2 features
Category: My New Category
Features:
AbModule.FeatureA:
Name: Feature A
Category: My New Category
AbModule.FeatureB:
Name: Feature B
Category: My New Category
Run Code Online (Sandbox Code Playgroud)
目前,该页面的My New Category部分Modules包含三个项目AB Module,Feature A和Feature B.
因为我的模块包含以外没有任何功能Feature A和Feature B,我想隐藏的选项,以使AB Module从用户,因为它没有提供的功能没有孩子已被启用的功能,并可能导致混乱.
这可能吗?如果是这样的话?
是否有可能在MVC控制器中有效地执行此类操作:
var vmObject = Activator.CreateInstance("A string representing the model that was posted");
//vmObject is of type object
TryUpdateModel(vmObject);// this would populate the object with the posted values, so that later on I could cast the object to strongly typed model similar to what was posted (not currently working)
//elsewhere in code (ie in a service that is injected into the controller)
var stronglyTypedVM = (MyViewModel)vmObject;//this instance would be populated with values from the controller
Run Code Online (Sandbox Code Playgroud)
原因是控制器不知道将在编译时发布的视图模型的类型,但注入其中的服务确实如此.
到目前为止,我还没有能够TryUpdateModel使用对象(似乎没有任何东西填充).
有没有办法从发布的值中填充此对象?我完全错误地采取了这种方式吗?谁能建议一个更好的方法来处理这个?
我们正在运行OD 1.6.
我想使用OD变量来更改不在应用程序设置部分中的会话状态提供程序等值.
我知道我可以使用转换,但作为一家公司,我们更喜欢使用OD变量而不是变换,因为它允许我们的运营团队在不改变代码库的情况下更改设置.
有没有办法将变量注入web.config中的任意位置?
就像是:
<sessionState mode="Custom" customProvider="#{MyODVariable.SessionStore}">
<providers>
<add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="#{MyODVariable.Host}"
accessKey="#{MyODVariable.AccessKey}" ssl="#{MyODVariable.SSL}" />
</providers>
</sessionState>
Run Code Online (Sandbox Code Playgroud) Orchard提及的内容处理程序文档Lifecycle Events(http://docs.orchardproject.net/Documentation/Understanding-content-handlers).
大多数事件是自我解释,但我想知道是否有人能告诉我之间的差异OnActivated,OnInitializing以及OnLoading?
c# ×3
orchardcms ×3
algorithm ×1
asp.net-mvc ×1
async-await ×1
newrelic ×1
razor ×1
specflow ×1