小编Gre*_*rdt的帖子

如何正确使用Html.ActionLink与ASP.NET MVC 4区域

我最近在ASP.NET MVC 4中发现了我已经成功实现的区域,但是我@Html.ActionLink在Razor视图中遇到了帮助器的问题.此助手生成的URL似乎总是相对于当前页面的URL.

我将我的网站在IIS 7(Win7)中配置为应用程序虚拟目录/Foo.

我注册了两个区域:管理员和博客.我在AdminAreaRegistration.csBlogsAreaRegistration.cs文件中有默认代码.我添加namespaces = new[] { "MvcProject.Controllers" }到默认RouteConfig的默认值:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new {
                controller = "Home", action = "Index", id = UrlParameter.Optional,
                namespaces = new[] { "MvcProject.Controllers" }
            }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

当我转到我的网站的主页:时http://localhost/Foo,它正确加载我的网站的"主页"页面.此时,所有操作链接都有正确的URL.

示例代码来自 MvcProject/Views/Shared/_Layout.cshtml

<h2>Main Navigation</h2>
<ul>
    <li>@Html.ActionLink("Home", "Index", "Home")</li>
    <li>@Html.ActionLink("Blogs", "Index", "Blogs/Home")</li>
    <li>@Html.ActionLink("Admin", "Index", "Admin/Home")</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

这正确地将HTML呈现为: …

c# asp.net-mvc-routing razor asp.net-mvc-4

40
推荐指数
2
解决办法
25万
查看次数

如何为所有SpecFlow功能重新生成设计器代码

我有~30个SpecFlow功能文件,我最近从源代码控制中删除了Foo.feature.cs文件,因为我厌倦了解决Designer Generated代码中的合并冲突.

我没有从Visual Studio项目中排除或删除这些文件,因此Visual Studio仍然认为它们应该在那里,它们只是在硬盘上丢失了.

理想情况下,我只想单击一个根文件夹并重新生成文件后面的所有代码,但VS 2010和SpecFlow 1.9不存在这样的选项.我甚至可以通过编程从命令行重新生成它们,创建另一个自定义工具或添加预编译构建事件.

有没有办法为SpecFlow功能(*.feature.cs文件)重新生成所有Designer生成的代码,而无需右键单击每个.feature文件并单击"运行自定义工具"?

bdd code-behind visual-studio-2010 customtool specflow

30
推荐指数
2
解决办法
2万
查看次数

页面对象模型链接是否与Cucumber的Gherkin兼容?

使用Test Automation的页面对象模型,我们将页面链接在一起,如下所示:

WebDriver driver = new WebDriver()
HomePage homePage = new HomePage(driver);
LoginPage loginPage = homePage.GoToLoginPage();
WelcomePage welcomePage = loginPage.Login();
etc
etc
Run Code Online (Sandbox Code Playgroud)

这样做的最大好处是,如果开发人员更改主页,使其不再链接到登录页面,我可以更新我的主页类,并在运行测试之前查看我需要更新的所有测试(有错误).

然而,对于小黄瓜,上面的每一行将形成一个单独的"步骤",因此是一个单独的方法.因此,如何进行这种连接?

是将页面对象类的实例(例如homePage,loginPage等)放入交叉gherkin语句持久性存储(例如specflow POCO或'World')的唯一方法吗?

selenium cucumber specflow gherkin pageobjects

28
推荐指数
1
解决办法
2862
查看次数

带PHP的HTML - <script> -section代码突然结束 - bug?

我在php-html-mixed代码中遇到了一个非常奇怪的行为.我正在使用XAMPP 3.2.1(PHP 5.2.0)和IntelliJ IDEA 14.1.

这是我的代码看起来像(为了便于阅读,擦洗,如果你需要更多让我知道):

<?php
for($i=0; $i<count($stringArray); $i++) {
    $pieces = explode($GLOBALS['delimiter'], $lineData[$i]);
?>
    <div>
        ...
        <input id="<?php echo $pieces[$someValidNumber]; ?>_identifier" ...>
        ...
        <script>
            // some javascript with <?php echo $variable; ?>
        </script>
       ...
    </div>
<?php } ?>
Run Code Online (Sandbox Code Playgroud)

当循环运行n次时会发生什么,对于n-1,一切看起来都很好,但在第n次运行中,在<script>-section中,代码突然停止.HTML文件在所有标签关闭时正常结束.

这看起来如下(n = 4):

$('input[id$="MegaSteel_tons"]').val(output2);
$('#MegaSteel_cart').prop(
Run Code Online (Sandbox Code Playgroud)

或(n = 2):

$('input[id$="BarZwo_meters"]').val(output2);
$('#BarZwo_cart').prop('type', 'button').change
Run Code Online (Sandbox Code Playgroud)

请注意,随着n的增加,停止不会以确定的方式发生.这意味着当我尝试n = 3时,结果如下:

$('input[id$="Bar_meters"]').val(output2);
$('#Bar_cart').prop('type', 'button').change();
var price
Run Code Online (Sandbox Code Playgroud)

我知道了.是什么导致这个?


按要求提供更多代码:

$lineData = array();
$f = fopen('products.csv', 'r');
while (($line = fgetcsv($f)) !== false) {
    if (strpos($line[0], …
Run Code Online (Sandbox Code Playgroud)

html javascript php intellij-idea

22
推荐指数
1
解决办法
570
查看次数

$ package和$ project params在NuGet install.ps1脚本中包含什么?

我正在为NuGet包编写我的第一个安装PowerShell脚本.我正在尝试将文件lib夹中的tools文件复制到另一个NuGet包的文件夹中.默认的install.ps1脚本有四个参数,其中两个是:

  • $包
  • $项目

它们似乎是某种"对象",但我不确定它们包含哪些属性和方法.我在网上做了一些搜索,但还没有找到这些参数的参考或任何文档.

查看此StackOverflow帖子,该问题包含指向Project Interface的链接.这$project是NuGet install.ps1文件中的内容吗?

powershell nuget nuget-package visual-studio-2013

13
推荐指数
1
解决办法
2531
查看次数

单元测试适配器引发异常:无法加载一个或多个请求的类型

我试图从Visual Studio 2010命令提示符运行SpecFlow测试,我收到一个相当迟钝的错误消息:

单元测试适配器引发异常:无法加载一个或多个请求的类型.检索LoaderExceptions属性以获取更多信息.

有关我的VS2010项目设置的一些信息:

  • Windows 7企业版,64位(版本6.1.7601 Service Pack 1 Build 7601)
  • Visual Studio 2010 Premium(v10.0.40219.1 SP1Rel)
  • 使用编码的UI测试
  • 使用SpecFlow 1.9.0,它委托CodedUI测试API
  • MSTest的
  • .NET v4.0.30319
  • 整个解决方案正在编译为32位代码(我仍然使用XP的同事)

我有一个post-build事件,它将我的NuGet包目录中的一些DLL文件复制到目标目录:

copy $(SolutionDir)packages\SpecBind.1.2.1.71\lib\net45\SpecBind.dll $(TargetDir)
copy $(SolutionDir)packages\SpecBind.CodedUI.1.2.1.71\lib\net45\SpecBind.CodedUI.dll $(TargetDir)
Run Code Online (Sandbox Code Playgroud)

没有这个,mstest无法以某种方式加载许多SpecFlow程序集.

测试项目App.config的相关部分

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
    <section name="specBind" type="SpecBind.Configuration.ConfigurationSectionHandler, SpecBind" />
  </configSections>

  <connectionStrings>
    ...
  </connectionStrings>

  <specFlow>
    <!-- For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config -->
    <unitTestProvider name="MsTest" generatorProvider="Specflow.CodedUI.MsTestCodedUiGeneratorProvider, Specflow.CodedUI" runtimeProvider="TechTalk.SpecFlow.UnitTestProvider.MsTest2010RuntimeProvider, TechTalk.SpecFlow" />
    <stepAssemblies>
      <!-- This attribute is required in order to …
Run Code Online (Sandbox Code Playgroud)

mstest visual-studio-2010 specflow

12
推荐指数
2
解决办法
2万
查看次数

在浏览器中加载虚拟目录名时,会话在AcquireRequestState中为空,但在加载Default.aspx时不为null

我有一个ASP.NET 4.0 WebForms应用程序.我需要在Global.asax中访问HttpContext.Current.Session并设置AcquireRequestState事件(或事件后面的事件)中的值,并且我发现了一种特殊的行为.

假设我在IIS中有一个虚拟目录(在我的情况下是版本7)Foo.在那我Default.aspx作为主页.示例Global.asax文件如下:

<%@ Application Language="C#" %>

<script runat="server">
    void Application_AcquireRequestState(object sender, EventArgs e)
    {
        HttpContext.Current.Session["key"] = "value";
    }
</script>
Run Code Online (Sandbox Code Playgroud)

当我http://localhost/Foo/Default.aspx在浏览器中访问时,它运行正常.当我访问时,http://localhost/Foo/我得到一个NullReferenceException我在会话上设置值的地方.唯一的变化是浏览器中的URL.它们最终会访问同一页面,但框架的行为会有所不同,具体取决于URL是否只包含文件夹名称,还是包含aspx文件.

检查if (HttpContext.Current.Session != null)对我来说不是一个选项,因为我需要在会话中为每个请求设置一个值,这是不可协商的.

IIS中是否存在我缺少的配置设置,或者这是一个错误/被遗忘的功能?

另一个问题的答案暗示IIS不会为每种请求加载会话,例如样式表不需要会话.也许这种行为正在发生,因为IIS无法提前告诉该文件夹名称是否会导致执行aspx文件或者它是否会传递静态HTML文件?

更新:我甚至尝试重新排序IIS查找的默认文档,以便"default.aspx"位于列表的顶部,例如

  1. Default.aspx的
  2. Default.asp的
  3. Default.htm的
  4. ...

我仍然遇到同样的问题.

更新:

事件处理程序只被触发一次,因为它导致了一个NullReferenceException.我已经做了一些额外的阅读,我知道ASP.NET会为每个请求触发这些事件,即使对于CSS或JavaScript文件也是如此.此外,没有为静态文件加载会话对象,因为没有访问会话的代码,因此无需加载对象.即便如此,第一个请求是对网页的请求,该请求将需要会话,并且会话为空.

@DmytroShevchenko问:

首先添加一个警卫检查,if (HttpContext.Current.Session != null)以便没有NullReferenceException抛出.然后尝试看一下,也许这个事件将会第二次被解雇,会话可用.

修改后的代码

void Application_AcquireRequestState(object sender, EventArgs e)
{
    if (HttpContext.Current.Session != null) …
Run Code Online (Sandbox Code Playgroud)

c# asp.net iis session webforms

12
推荐指数
1
解决办法
5644
查看次数

安装后Jenkins的默认凭据

我在Windows10上下载了Jenkins.当我尝试访问jenkins时,它要求输入用户名和密码.我已经阅读了同一问题的主题.但我没有在Jenkins文件夹下找到任何秘密文件夹或config.xml文件.

windows jenkins windows-10

12
推荐指数
2
解决办法
5万
查看次数

如何使用MSTest从命令行运行SpecFlow方案?

我有Visual Studio 2010,我们有两个VS解决方案.第一个是Web应用程序,第二个是SpecFlow测试.让两个Visual Studio实例同时运行只是为了运行SpecFlow功能正在吃掉所有可用的RAM,导致速度变慢.

我已经在Google上和StackOverflow上进行了一些搜索,并在MSTest命令行工具上仔细阅读了MS文档,但我还没有找到答案.完整的SpecFlow测试套件需要大约45分钟才能完成,我真的只需要运行几个场景.

我想知道是否有办法使用MSTest从命令行运行单独的SpecFlow功能,甚至是个别方案?

c# bdd mstest specflow

11
推荐指数
2
解决办法
2万
查看次数

如何使用 FluentValidation 验证 Dictionary&lt;string, T&gt; 视图模型属性中的项目

我正在使用Dictionary<string, T>数据结构将电话号码存储在视图模型中。用户可以在将它们发回服务器之前在客户端添加或删除它们。


背景故事:我正在使用字典,因为List<T>在 ASP.NET MVC 5 中使用数据结构需要表单字段的名称包含从零开始的顺序索引,并且 JavaScript 在屏幕上添加或删除这些字段变得非常痛苦无需重新排序索引值。我发现使用字典很容易。现在我正在做一个概念验证任务来启用依赖注入,这允许我们在验证期间使用我们的 NHibernate 会话来查询数据库,并使用控制器和视图模型使用的相同会话而不是 FluentValidation 的“单例”模式与 MVC 5 一起使用。

当使用[Validator(typeof(T))]视图模型上面的属性时,消息按字段显示就好了,但是验证器实例在 AppDomain 中是单例的,并且验证器使用的 NHibernate 会话与控制器使用的不同。这会导致数据在数据验证期间变得不同步。检查数据库的验证开始返回意外结果,因为 NHibernate 在服务器上缓存了如此多的数据,并且它实际上有 2 个单独的缓存。


项目设置

  • ASP.NET MVC 5
  • .NET Framework 4.5.1(但我们可以升级)
  • FluentValidation v8.5.0
  • FluentValidation.Mvc5 v8.5.0
  • FluentValidation.ValidatorAttribute v8.5.0

查看模型

public class PersonForm
{
    public PhoneFieldsCollection Phones { get; set; }
}

public class PhoneFieldsCollection
{
    public Dictionary<string, PhoneNumberFields> Items { get; set; }
}

public class PhoneNumberFields
{
    [Display(Name="Country Code")]
    [DataType(DataType.PhoneNumber)]
    public string …
Run Code Online (Sandbox Code Playgroud)

c# validation asp.net-mvc fluentvalidation

7
推荐指数
0
解决办法
2232
查看次数