小编jru*_*ell的帖子

当我对我的操作进行单元测试时,为什么 Controller.Url 为空?

我已经按照这个答案来模拟 HttpContext、Request、Response 和 User 并设置Controller.ControllerContextand Controller.Url

Controller.Url在调用之前绝对不为空controller.Index()。然而,在内部controller.Index(),它是空的。看起来很奇怪。我缺少什么?

这是我的测试装置:

[TestFixture]
public class ControllerFixtureBase
{
    private Mock<HttpContextBase> _httpContextMock;
    private RouteCollection _routes;

    [SetUp]
    public void SetUp()
    {
        var requestMock = new Mock<HttpRequestBase>();
        requestMock.SetupGet(x => x.ApplicationPath)
            .Returns("/");
        requestMock.SetupGet(x => x.Url)
            .Returns(new Uri("http://localhost/a", UriKind.Absolute));
        requestMock.SetupGet(x => x.ServerVariables)
            .Returns(new NameValueCollection());

        var responseMock = new Mock<HttpResponseBase>();
        responseMock.Setup(x => x.ApplyAppPathModifier(It.IsAny<string>()))
            .Returns((string url) => url);

        var principalMock = new Mock<IPrincipal>();
        principalMock.SetupGet(p => p.Identity)
            .Returns(new GenericIdentity("testuser"));
        principalMock.Setup(p => p.IsInRole(ApplicationRoles.DataAdmin))
            .Returns(false); …
Run Code Online (Sandbox Code Playgroud)

nunit moq asp.net-mvc-3

5
推荐指数
1
解决办法
2255
查看次数

您是否可以在属于另一个VSTS帐户的VSTS Feed中恢复包?

我公司有很多Visual Studio Team Services帐户.我们有一个用于内部开发,一个用于我们的每个客户.我们在内部开发帐户(https://{dev-account}.visualstudio.com/DefaultCollection)中托管我们的内部nuget库,并且我想在客户端帐户(https://{client-account}.visualstudio.com/DefaultCollection)中运行构建时恢复包.

我使用bootstrap工具设置了存储库,在我的VSTS构建中,我添加了一个Batch Script构建步骤来执行init.cmd.这很好,但是,下一步是NuGet Package Restore,它在dev帐户的NuGet提要中找不到包:

2016-03-22T23:34:37.5398840Z请提供以下网址的凭据:https:// {dev-account} .pkgs.visualstudio.com/DefaultCollection/_packaging/{my-feed} /nuget/v3/index.json

2016-03-22T23:34:37.5408842Z用户名:密码:警告:无法找到包'{my-package}'的版本'1.9.0.10'.

这是有道理的,因为Feed位于单独的VSTS帐户中,并且构建代理无权访问该Feed.

有没有办法解决?我知道MyGet,它提供免费的公共供稿,但如果可能的话,我想使用VSTS.

tfsbuild nuget azure-devops

5
推荐指数
1
解决办法
542
查看次数

哪个Facebook C#SDK?官方(github)或非官方(codeplex)?

它们都具有相同的名称并使用新的Graph API,但哪个更适合ASP.NET 4.0 WebForms?官方SDK在几个月内没有更新,但Codeplex上的SDK刚刚在上周更新.有没有人有经验可以提供意见?

https://github.com/facebook/csharp-sdk

http://facebooksdk.codeplex.com/

c# asp.net facebook facebook-graph-api facebook-c#-sdk

4
推荐指数
1
解决办法
1906
查看次数

如何在EF 4.1代码中首先使用延迟加载和两个表上的相同主键编码可选的一对一关系?

我正在使用基于ASP/ADO.NET的应用程序和数据结构,我正在将其中的一部分转换为ASP.NET MVC.在数据结构中,存在"可选的一对一"关系,其中两个表使用相同的主键和名称.基本上,这个表可以被认为是主表的"可选扩展".以下是该型号的样品:

public class ZoneMedia
{
    public int ZoneMediaID { get; set; }
    public string MediaName { get; set; }
    public int Width { get; set; }
    public int Height { get; set; }

    public virtual ZoneMediaText MediaText { get; set; }
}

public class ZoneMediaText
{
    public int ZoneMediaID { get; set; }
    public string Text { get; set; }
    public int Color { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

显然,EF 4.1代码首先会自动映射这个问题.所以我意识到我必须明确指定映射.我试过这个:

    modelBuilder.Entity<ZoneMedia>()
        .HasOptional(zm => zm.ZoneMediaText);

    modelBuilder.Entity<ZoneMediaText>()
        .HasRequired(zmt => zmt.ZoneMedia)
        .WithRequiredDependent(zm …
Run Code Online (Sandbox Code Playgroud)

entity-framework ef-code-first entity-framework-4.1

4
推荐指数
1
解决办法
5493
查看次数

有没有办法在C#中测试特定的sql异常类型?

从数据库中删除记录时,偶尔会遇到引用约束异常.

以下是例外细节.当异常与外键约束错误特别相关时,是否可以向用户显示消息?

我可以查看异常错误字符串并测试是否存在单词,但我不确定是否有更好的方法来检查特定的SQL错误.

谢谢凯文

Message: The DELETE statement conflicted with the REFERENCE constraint "FK_Customers_PaymentTerms". The conflict occurred in database "kd", table "dbo.Customers", column 'CstPtmID'.
The statement has been terminated.
Source: .Net SqlClient Data Provider
TargetSite: Void OnError(System.Data.SqlClient.SqlException, Boolean)
StackTrace:    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior …
Run Code Online (Sandbox Code Playgroud)

c# sql-server asp.net

4
推荐指数
1
解决办法
359
查看次数

如何在运行时检查EF模型元数据?

在保存数据库中的各个字段之前,我需要进行一些修剪.我们将xml从另一个应用程序反序列化为EF实体,然后插入它们.xml中有少量字段超过4000个字符,而不是使用TEXT数据类型,我们希望修改它们.

我的想法是检查MetadataWorkspaceDbChangeTracker内部MyDbContext.SaveChanges()找到任何nvarchar(4000)实体属性并修剪任何超过4000的字符串值.但我不知道如何处理这个.我找不到任何相关文件.我看到了一些相关的问题,但没有任何细节或提供任何代码示例.

这是我到目前为止所得到的:

public override int SaveChanges()
{
    //TODO: trim strings longer than 4000 where type is nvarchar(max)
    MetadataWorkspace metadataWorkspace = 
        ((IObjectContextAdapter) this).ObjectContext.MetadataWorkspace;
    ReadOnlyCollection<EdmType> edmTypes = 
        metadataWorkspace.GetItems<EdmType>(DataSpace.OSpace);

    return base.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

这是基于@ GertArnold答案的解决方案.

// get varchar(max) properties
var entityTypes = metadataWorkspace.GetItems<EntityType>(DataSpace.CSpace);
var properties = entityTypes.SelectMany(type => type.Properties)
    .Where(property => property.TypeUsage.EdmType.Name == "String"
           && property.TypeUsage.Facets["MaxLength"].Value.ToString() == "Max"
           // special case for XML columns
           && property.Name != "Xml")
    .Select(
        property =>
            Type.GetType(property.DeclaringType.FullName) …
Run Code Online (Sandbox Code Playgroud)

entity-framework-4 ef-code-first

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

JS中的EnableValidator

我有一个验证器 Webform.aspx

<asp:RequiredFieldValidator ID="val1" ClientIDMode="Static" runat="server"/>
Run Code Online (Sandbox Code Playgroud)

在我的jquery中,我有一个函数试图通过标记中的按钮调用它来禁用它

btnclick = function()
{
    var a = $('#val1');
    alert(a); //alerts [object Object]
    ValidatorEnable(a, false); //gets a console error
}
Run Code Online (Sandbox Code Playgroud)

当执行此功能时,我在控制台中收到错误(我正在使用谷歌浏览器),这样说 uncaught TypeError: Cannot set property 'visibility' of undefined

这是说我的var a未定义?......但这没有任何意义,因为它提醒了一个人[object Object]

我也做了alert(a.length)这给了我1预期的.

javascript asp.net validation jquery

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

获取请求正确解析我的控制器,但没有调用正确的(或任何)操作

我有一个有两个模型的网络项目 - IndicatorModelGranteeModel.我也有相应的ApiControllers - IndicatorsController,和GranteesController.我打算将这个设置用于我的实际web项目的数据API,所以我在我的项目中创建了一个名为"Api"的新区域.在我的ApiAreaRegistration班上,我正在为这些控制器注册路由,如下所示:

context.Routes.MapHttpRoute(
  name: "ApiDefault",
  routeTemplate: "api/{controller}/{id}",
  defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)

基本上,http://myapp/api/indicators/123应该转到Indicators控制器的请求,它应该特别由接受整数参数的action方法处理.我的控制器类设置如下,它完美地工作:

public class IndicatorsController : ApiController
{
    // get: /api/indicators/{id}
    public IndicatorModel Get(int id)
    {
        Indicator indicator = ...// find indicator by id
        if (indicator == null)
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
        return new IndicatorModel(indicator);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的GranteesController课程设置相同:

public class GranteesController : ApiController
{
    // get: /api/grantees/{id}
    public GranteeModel Get(int …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-routing asp.net-web-api

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

动态创建CSS类名?

我想做这样的事情:

视图

<td class="status_@Model.IsActive">
      @Model.Description
</td>
Run Code Online (Sandbox Code Playgroud)

CSS

<style type="text/css">
    .status_True
    {
        background-color: Red;
    }
    .status_False
    {
        background-color: Green;
    }
</style>
Run Code Online (Sandbox Code Playgroud)

@Model.IsActive是回归True还是False.当然这段代码不起作用.

类的Html输出是: class="status_@Model.IsActive"

我的预期输出是: class="status_True"

这可能是做这样的逻辑吗?如果可能,我该怎么办?还是另一种改变css类的方法?可能有不同的方式.

谢谢.

css asp.net-mvc razor

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

从字典中删除项目的有效方法

我有两个词典dict1和dict2,我想从dict2中删除dict2中使用其键的项目.而不是循环通过dict2并使用"ContainsKey"方法,我还有其他方法,比如使用linq.

c# linq linq-to-objects

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