标签: asp.net-mvc-2

如何对自定义验证属性进行单元测试

我有一个自定义的asp.net mvc类验证属性.我的问题是如何对其进行单元测试?测试类具有属性是一回事,但这实际上不会测试其中的逻辑.这是我想测试的.

[Serializable]
[EligabilityStudentDebtsAttribute(ErrorMessage = "You must answer yes or no to all questions")]
public class Eligability
{
    [BooleanRequiredToBeTrue(ErrorMessage = "You must agree to the statements listed")]
    public bool StatementAgree { get; set; }

    [Required(ErrorMessage = "Please choose an option")]
    public bool? Income { get; set; }
Run Code Online (Sandbox Code Playgroud)

.....为简洁而删除}

[AttributeUsage(AttributeTargets.Class)]
public class EligabilityStudentDebtsAttribute : ValidationAttribute
{
    // If AnyDebts is true then 
    // StudentDebts must be true or false

    public override bool IsValid(object value)
    {
        Eligability elig = (Eligability)value;
        bool ok …
Run Code Online (Sandbox Code Playgroud)

c# validation unit-testing asp.net-mvc-2

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

在单元测试中多个断言是坏的吗?即使链接?

在这个单元测试中检查这么多东西有什么问题吗?:

ActualModel = ActualResult.AssertViewRendered()        // check 1
                          .ForView("Index")            // check 2
                          .WithViewData<List<Page>>(); // check 3

CollectionAssert.AreEqual(Expected, ActualModel);      // check 4
Run Code Online (Sandbox Code Playgroud)

此测试的主要目标是验证返回正确的视图(检查2)并且它包含正确的数据(检查4).

我可以通过将其分成多个测试来获得任何收益吗?我一切都是为了做正确的事情,但如果它没有实际价值我就不会分手了.

我对单元测试很陌生,所以请保持温和.

c# unit-testing mstest asp.net-mvc-2

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

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

无法直接请求文件"〜/ Views/Position/Edit.cshtml",因为它调用"RenderSection"方法

我试图将我可以在部分重用的所有内容分开,这样我就可以更容易地进行维护.

但是我得到了这个例外:无法直接请求文件"〜/ Views/Position/Edit.cshtml",因为它调用了"RenderSection"方法

我创建了一个名为sections.cshtml的文件,其中包含以下内容:

@section scripts{
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
}
Run Code Online (Sandbox Code Playgroud)

在_layout.cshtml文件中,我将其更改为:

<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    @RenderSection("scripts", required:false)
    @*<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>*@
</head>
Run Code Online (Sandbox Code Playgroud)

当我在浏览器中转到视图并检查它只显示的源代码时:

<head>
    <meta charset="utf-8" />
    <title>Edit</title>
    <link href="/Content/Site.css" rel="stylesheet" type="text/css" />
</head>
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc razor asp.net-mvc-3 asp.net-mvc-2

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

ASP.NET MVC 2.0 JsonRequestBehavior全局设置

默认情况下,ASP.NET MVC 2.0将在操作尝试返回JSON以响应GET请求时抛出异常.我知道这可以通过使用JsonRequestBehavior.AllowGet逐个方法覆盖,但是可以在控制器或更高的基础上设置(可能是web.config)吗?

更新:Per Levi的评论,这是我最终使用的 -

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding)
{
    return Json(data, contentType, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc-2

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

ASP.NET MVC重定向与模型

我目前在我的控制器中有一个方法,它接受表单集合,保存数据,然后在"详细信息"页面中显示数据.目前,代码目前看起来像:

[HttpPost]
public ActionResult Create(PersonModel person)<br>
{
    if (person.IsValid())
    {
        person.additionalData = "Person created successfully";
        return View("Details", person);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是以这种方式返回Details视图会保留URL mysite/Person/Create - 理想情况下我希望URL为mysite/Person/Details/IdGoesHere.

我相信这一定是可能的.显然,我可以使用Response.Redirect,但是这不允许我将模型传递给视图.据我所知,我无法使用RedirectToAction传递模型?

谢谢您的帮助.

编辑:确认 - "创建"操作生成的模型与"详细信息"操作创建的默认模型不同.因此,直接重定向到Action并传递Id不起作用,因为生成的模型不正确.为了提供更多上下文,"创建"操作中的模型包含一个附加值,表示"人员已成功创建",如果我重定向到"详细信息"操作,则此消息不会出现在模型中.

c# asp.net asp.net-mvc asp.net-mvc-2

39
推荐指数
4
解决办法
7万
查看次数

如何在.NET MVC 2中实现正确的HTTP错误处理?

我一整天都在努力在我的ASP.NET MVC 2应用程序中实现错误处理.我看过各种各样的技术,但都没有正常工作.我正在使用MVC2和.NET 4.0(在MVC3发布之前启动项目;我们将在发布初始版本后进行升级).

在这一点上,我将很乐意正确处理404和500错误 - 403(需要授权)也会很好,其次是各种其他特定的响应.现在,我得到所有404,全部500,全部302在404之前,或者全部302在500之前.

这是我的要求(应该非常接近HTTP的基本要求):

  • 如果找不到资源,则抛出404,并显示包含所请求URL的特定于404的页面.不要返回像302这样的中间响应代码.理想情况下,保留请求的URL,而不是显示新的URL /Error/NotFound,但如果显示后者,请确保我们没有返回重定向响应来获取它.

  • 如果发生内部服务器错误,则抛出500,并显示500特定错误,并指出出现了什么问题.同样,不要返回中间响应代码,理想情况下不要更改URL.

这是我认为的404:

  1. 找不到静态文件: /Content/non-existent-dir/non-existent-file.txt
  2. 未找到控制器: /non-existent-controller/Foo/666
  3. 找到控制器,但未找到操作: /Home/non-existent-action/666
  4. 找到控制器和操作,但操作找不到请求的对象: /Home/Login/non-existent-id

这是我认为的500:

  1. 发布一个不好的价值: POST /User/New/new-user-name-too-long-for-db-column-constraint
  2. 非数据相关问题,如Web服务端点无响应

其中一些问题需要由特定的控制器或模型识别,然后控制器应抛出适当的HttpException.其余的应该更一般地处理.

对于404情况#2,如果找不到控制器,我尝试使用自定义ControllerFactory来抛出404.对于404#3案例,我试图使用自定义基本控制器来覆盖HandleUnknownAction并抛出404.

在这两种情况下,我在404之前得到302.而且,我从来没有得到500个错误; 如果我修改Web.config以在我的Web服务端点中输入拼写错误,我仍然得到302,然后404表示无法找到使用 Web服务的URL(控制器/操作).我还将请求的URL作为(不需要的)查询字符串参数获取:/Error/NotFound?aspxerrorpath=/Home/non-existent-action

这两种技术都来自http://www.niksmit.com/wp/?p=17(如何使用ASP.Net MVC获取正常的404(找不到页面)错误页面),来自http:// richarddingwall .名称/ 2008/08/17 /为基础的战略,为资源-404-错误-在-ASPNET-MVC /

如果在我的Web.config中<customErrors mode="On" defaultRedirect="~/Error/Unknown" redirectMode="ResponseRedirect" />,我得到了相应的响应代码,但我的错误控制器永远不会被调用.取出redirectMode属性可以获得MVC错误视图,但是介入302和更改的URL - 并且始终是相同的控制器(Unknown= 500;如果我将其更改为NotFound一切看起来像404).

以下是我已阅读并尝试实施的其他一些内容:

..以及一堆StackOverflow帖子.

在我看来,这种错误处理对于Web应用程序来说是非常基本的,并且MVC框架应该具有开箱即用的默认设置,并且让人们将其扩展为其他工作.也许他们会在将来的版本中做到这一点.在此期间,有人可以向我提供有关如何实施正确HTTP响应的全面详细信息吗?

error-handling asp.net-mvc http httpresponse asp.net-mvc-2

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

MSBuild DeployOnBuild = true不发布

我有一个Visual Studio 2010 MVC2 Web应用程序,我正在使用Hudson通过命令行构建.我想让Hudson发布一个Web输出,所以我将DeployOnBuild = true和CreatePackageOnPublish = True标记添加到我的命令行.

我的命令是:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 
   /target:Clean,Build 
   /property:Configuration=Debug;DeployOnBuild=True;CreatePackageOnPublish=True; 
   [my project name.csproj]
Run Code Online (Sandbox Code Playgroud)

在我的开发机器(Windows 7)上运行此命令成功发布了一个Web输出\obj\Debug\Package\PackageTmp\.但是在Hudson服务器(WS 2008)上运行它会成功编译,但它不会发布.相同的命令,相同版本的MSBuild,相同的源代码.

我已经尝试了/t:Publish目标,这给了我一个Skipping Unpublishable Project响应,正如我在其他几个人的帖子中看到的那样.

我已经尝试将DeployOnBuild=TrueCreatePackageOnPublish=True标签添加到我的项目文件中,并且没有任何变化.

有关为什么不发布的任何想法?我错误地使用这些标签吗?我确信这里有一些我没看到的东西.

asp.net msbuild publishing asp.net-mvc-2

39
推荐指数
1
解决办法
3万
查看次数

ASP.NET MVC资源文件的最佳实践

以下资源文件的最佳用法是什么?

  1. 属性→资源(Phil使用此资源在DataAnnotation中进行本地化)
  2. App_GlobalResources文件夹
  3. App_LocalResources文件夹

我也想知道asp.net mvc应用程序中(1)和(2)之间的区别.

asp.net-mvc localization resx asp.net-mvc-2

37
推荐指数
3
解决办法
5万
查看次数

具有指定HTML ID的Html.ActionLink?

我想用生成Html.ActionLink的HTML ID 生成,这样我就可以根据我的位置更改CSS.我有一MasterPage组链接,我想区分活动的"Tab"和Jquery更改活动的#id的css

现在我正在使用:

<%: Html.ActionLink("Some View", "Index", "controller")%>
Run Code Online (Sandbox Code Playgroud)

它产生:

<a href="/controller">Some View</a>
Run Code Online (Sandbox Code Playgroud)

我想生成:

<a id="something" href="/controller">Some View</a>
Run Code Online (Sandbox Code Playgroud)

那可能吗?我试过了:

<%: Html.ActionLink("Some View", "Index", "controller", new {id="blahbla")%>
Run Code Online (Sandbox Code Playgroud)

但这会产生:

<a href="/controller/Length?5">Some View</a>
Run Code Online (Sandbox Code Playgroud)

css asp.net-mvc html-helper actionlink asp.net-mvc-2

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