小编dav*_*avy的帖子

通过RenderAction在Asp.Net MVC 4中扩展共享代码时无法进行验证

我使用大量共享代码,有时我需要尝试扩展功能而不改变现有的解决方案.我采用了一种模式(或者它是一种反模式?),它允许添加一些"小部件",但它不能完全用于验证.

脚本

我有一个现有的共享控制器,视图模型,验证器(流畅的验证)和视图.我想在视图中添加一个文本框,从用户的角度看它似乎是共享页面的一部分,而不更改任何共享代码.我可以实现我想要的,除了在添加的文本框上进行验证.

我为我的小部件创建了一个控制器,视图模型,验证器和部分视图.然后我在共享视图中使用类似强类型的RenderAction:

@{ Html.RenderAction<MyWidgetController>(x => x.Execute()); }
Run Code Online (Sandbox Code Playgroud)

小部件代码

查看模型

[Validator(typeof(WidgetValidator))]    
public class Widget
{        
    public int? WidgetTest{ get; set; }        
}
Run Code Online (Sandbox Code Playgroud)

小部件验证器

public class TestValidator : AbstractValidator<WidgetViewModel>
{
    public TestValidator()
    {
        RuleFor(x => x.WidgetTest).GreaterThan(-1).WithValidationResource("Widget_Error");
    }
}
Run Code Online (Sandbox Code Playgroud)

小部件控制器

[AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Execute()
    {           
        return PartialView("_widget", model);
    }

    [AcceptVerbs(HttpVerbs.Post)]
    [ChildActionOnly]
    public ActionResult Execute(WidgetViewModel model)
    {                              
        return PartialView("_widget", model);
    }
Run Code Online (Sandbox Code Playgroud)

部分视图位于表单标记内,并且只有在共享模型也有效的情况下才会执行服务器端验证.

否则,该页面将被视为有效并将继续,大概是因为共享页面有效,因此重定向.

无论如何,我可以将此窗口小部件作为其添加到的页面的一部分进行验证,而无需更改共享控制器或视图模型中的代码吗?

或者,这只是一个坏主意,是否有更好的方法来实现扩展?

提前致谢

asp.net-mvc fluentvalidation

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

在ASP.Net MVC 4.0中获取视图文件夹内的文件

我需要views\something在MVC 4.0中检索文件夹内的单个视图的名称(来自请求)并且我不确定如何最好地执行它.

我的代码有效,但它有一种'hacky'的感觉,我希望有人可以简化.

我的代码看起来像:

    private FileInfo GetNameOfViewToServe()
    {
        var LeftPartOfUri = Request.Url.GetLeftPart(UriPartial.Authority);
        var folder = Request.Url.AbsoluteUri.Replace(LeftPartOfFolderUri,string.Empty);
        var directory = new DirectoryInfo(Server.MapPath(@"~\Views\" + folder));
        return directory.GetFiles().First();
    }       
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式来实现这一目标?

c# asp.net directory mappath

6
推荐指数
1
解决办法
864
查看次数

上传到Azure网站时,不在X509Store中的SSL证书

我使用管理门户上载证书将.pfx安装到我的Azure网站.

我现在正尝试使用以下代码访问它们:

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certificateStore.Open(OpenFlags.ReadOnly);
var certificates = certificateStore.Certificates;

StringBuilder sb = new StringBuilder();

foreach (var certificate in certificates)
{
   sb.AppendLine(certificate.Subject);                
}
Run Code Online (Sandbox Code Playgroud)

发布到Azure时,会列出一堆证书,但不会列出我上传的证书.

列出的证书在这里:

CN=WW.azurewebsites.windows.net, OU=CIS(RD), O=Microsoft
CN=FullOSTransport
CN=client.geo.to.stamp.azurewebsites.windows.net
CN=ma.waws-prod-am2-005.azurewebsites.windows.net, OU=OrganizationName, O=Microsoft,     
L=Redmond, S=WA, C=US
CN=FullOSTransport
CN=FullOSTransport
Run Code Online (Sandbox Code Playgroud)

我从Verisign购买了证书,它似乎已正确上传,并且显示在浏览器的"HTTPS"栏中(在Chrome中).

任何帮助都会非常感激,因为我在这里不知所措.

更新

看起来我们需要转换为Cloud Service才能使上述代码正常工作.但我可以按照此处的建议将证书添加到我的app_data文件夹吗?

http://blog.tylerdoerksen.ca/2015/11/29/pfx-certificate-files-and-azure-web-apps/

这似乎适用于Azure-Websites而不使用Web角色.

谢谢

c# ssl-certificate azure-web-sites

6
推荐指数
2
解决办法
4009
查看次数

接口无法声明类型问题C#

这个问题更多的是针对良好的设计实践,而不是异常和堆栈.我很抱歉一开始并不清楚.

我希望在C#中为我的类提供自己的例外.在Java中,以下概念是完全合法的,因此如果您有一些堆栈的具体实现,您可以实现一致的错误处理(或任何其他类型的类)

public interface IStack
{   
    bool IsEmpty();
    int Pop();
    void Push(int element);
    int Size { get; set; }
    int Top();

    public class EmptyException : Exception
    {
    }

    public class SomeOtherClass
    {
    }
}  
Run Code Online (Sandbox Code Playgroud)

当然,在C#中我得到一个错误,说"接口不能声明类型"

确保只实现我的接口的具体类可以访问EmptyException等的最佳方法是什么?

谢谢

c# interface

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

如何从延迟对象访问返回值?

我有以下代码$.getJSON在存储库中使用,以返回一些数据,然后由其他函数使用.

$.when(
    repository.getUserDetails().done(dataPrimer.getUserDetails),

    $.Deferred(
        function (deferred) {
           deferred.resolve();
        }
    )

).done(
   function () {
       repository.getUserPolicyTitles().done(dataPrimer.getUserPolicyTitles);
   },

   function () {
       repository.getUserPage().done();
   }
);
Run Code Online (Sandbox Code Playgroud)

这有效,但我需要从以下位置返回一个值:repository.getUserDetails().done(dataPrimer.getUserDetails) 可以用作参数:repository.getUserPage().done();

getUserDetails的dataPrimer模块目前如下所示:

var getUserDetails = function (jsonString) {
    var object = parser.parse(jsonString);
    userDetails.userName = object.user.userName;
    userDetails.lastPolicyWorkedOn = object.user.lastPolicyWorkedOn;
    return userDetails.lastPolicyWorkedOn;
}
Run Code Online (Sandbox Code Playgroud)

我尝试了一些事情,比如.pipe()没有快乐,并且想要确信我正在使用一个体面的方法,所以我正在寻找"最佳实践"的方式来返回参数并在repository.getUserPage()函数中使用它吗?

javascript jquery jquery-deferred

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

XDocument.Load()和XDocument.Save()的测试方法

我在Visual Studio 2010中的MVC4 Web API应用程序中使用XDocument,并且不确定测试策略.

我的大多数单元测试都使用内存中的XDocument,它适用于控制器,服务和存储库测试.

但是,我有XDocument.Load(filename)和XDocument.Save(filename)场景,我想测试(使用单元测试或集成测试).

我一直在寻找以下问题\回答关于所以在这里,但我不知道如何着手.

public class PathProvider
{
   public virtual string GetPath()
   {
      return HttpContext.Current.Server.MapPath("App_Data/policies.xml")
   }
}

PathProvider pathProvider = new PathProvider();
XDocument xdoc = XDocument.Load(pathProvider.GetPath());
Run Code Online (Sandbox Code Playgroud)

所以,我得到了我现在可以模拟调用XDocument.Load(pathProvider.GetPath())的任何调用.

我应该尝试测试PathProvider的工作原理吗?如果,那么,我将如何处理这个问题?

谢谢

戴维

testing tdd mocking linq-to-xml

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

测试实体框架5 - 在内存数据库中是一个不错的选择

我很欣赏这里有很多实体框架测试问题.但是,我遇到了Effort,它允许内存版本的数据库上下文.我想我在这方面有几个问题:

  1. 使用这种方法的利弊是什么?

  2. 我认为EF和内存数据库使用存储库和工作单元模式,这是否意味着我们在使用这种方法时没有实现自己的?

  3. 还有其他选项,比如提供假的IDBSet,使用SQL CE或实现存储库和工作单元模式,我是否更好地使用这些技术之一?

我觉得这里选择的数量有点不知所措.我意识到可能没有银弹,但我希望得到一些指导.

谢谢

c# testing unit-testing entity-framework sql-server-ce

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

何时在C#中使用Assert.AreEqual()比较字符串时传递Culture

我遇到过其他开发人员编写的一些单元测试,这些测试经常使用Assert.AreEqual像这样的重载版本:

 Assert.AreEqual(stringparamX, stringParamY, true, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

stringParamX在单元测试中设置,并且stringparamY将是被测系统的结果.

可能会将此代码移植到其他国家/地区,并且可以执行这些测试.但是,在查看MSDN文档文档时,我不禁想到传入CultureInfo.InvariantCulture这里会增加一些不必要的复杂性.如果在其他文化中执行,我不确定它会对测试产生什么样的影响.

在我的情况下,在单元测试的上下文中,我为什么要(或不)写这样的断言?

c# unit-testing cultureinfo

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

使用Object.Create向JavaScript对象添加函数

我正在尝试在JavaScript中使用Object.Create.我目前有以下代码:

var vehicle = {
        getModel: function () {
        console.log( "The model of this vehicle is.." + this.model );
    }
};

var car = Object.create(vehicle, {
    "id": {
       value: 9,         
    },
    "model": {
       value: "Ford",  
    }
});

var van = Object.create(vehicle, {
  "id": {
     value: 10,    
   },
    "model": {
      value: "Big Van",
      enumerable: true
   },
    "make": {
      value: "Warrior",      
   },
    "getMake": function () {
       console.log( "The make of this vehicle is.." + this.make );
   }
});
Run Code Online (Sandbox Code Playgroud)

我试图为getMake添加一个函数,但是我得到了错误:

TypeError:当我调用时,对象#的属性'getMake'不是函数:

van.getMake();

这可能吗?你怎么做呢?

javascript oop object-create

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

如何监视jQuery的追加函数Sinon

我试图用来sinon.js创建一个间谍jQuery.append功能.

我试过:var spy = sinon.spy($, "append");并得到以下错误: TypeError: Attempted to wrap undefined property append as function.

然后我修改为:var spy = sinon.spy($.fn, "append");看起来更好,但是spy.called错误.

javascript jquery sinon

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