小编and*_*ecu的帖子

ASP.NET MVC和text/xml内容类型

我想从一个动作返回一个View(),结果响应应该有一个text/xml的内容类型而不是默认的text/html.

我尝试过以下方法但没有成功:

Response.ContentType = "text/xml"; 
return View();
Run Code Online (Sandbox Code Playgroud)

我知道您可以通过返回来指定内容类型ContentResult,但这不会呈现我的视图.

我希望我不需要将视图呈现为字符串然后使用return Content(),所以我可能会忽略一些简单的方法.

xml asp.net-mvc

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

.NET中更快(不安全)的BinaryReader

我遇到了一个情况,我有一个非常大的文件,我需要从中读取二进制数据.

因此,我意识到.NET中的默认BinaryReader实现非常慢.用.NET Reflector查看它后,我发现了这个:

public virtual int ReadInt32()
{
    if (this.m_isMemoryStream)
    {
        MemoryStream stream = this.m_stream as MemoryStream;
        return stream.InternalReadInt32();
    }
    this.FillBuffer(4);
    return (((this.m_buffer[0] | (this.m_buffer[1] << 8)) | (this.m_buffer[2] << 0x10)) | (this.m_buffer[3] << 0x18));
}
Run Code Online (Sandbox Code Playgroud)

这让我觉得非常低效,想到自32位CPU发明以来计算机是如何设计用于32位值的.

所以我使用这样的代码创建了我自己的(不安全的)FastBinaryReader类:

public unsafe class FastBinaryReader :IDisposable
{
    private static byte[] buffer = new byte[50];
    //private Stream baseStream;

    public Stream BaseStream { get; private set; }
    public FastBinaryReader(Stream input)
    {
        BaseStream = input;
    }


    public int ReadInt32()
    {
        BaseStream.Read(buffer, 0, 4);

        fixed …
Run Code Online (Sandbox Code Playgroud)

c# performance pointers unsafe binaryreader

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

为什么ASP.NET MVC忽略了我的尾随斜杠?

请考虑以下路线:

    routes.MapRoute(
        "Service", // Route name
        "service/", // URL with parameters
        new {controller = "CustomerService", action = "Index"} // Parameter defaults
        );
Run Code Online (Sandbox Code Playgroud)

使用Url.Action("Service", "CustomerService")生成的网址/service而不是预期的网址/service/

有没有办法让这个工作,或者我是否必须求助于实现我自己的路由派生RouteBase

asp.net-mvc asp.net-mvc-routing

8
推荐指数
1
解决办法
3382
查看次数

使用依赖注入注入依赖注入器

对依赖注入很新,我试图弄清楚这是否是反模式.

假设我有3个组件:

Foo.Shared - this has all the interfaces
Foo.Users - references Foo.Shared
Foo.Payment - references Foo.Shared
Run Code Online (Sandbox Code Playgroud)

Foo.Users需要一个在Foo.Payment中构建的对象,而Foo.Payment也需要来自Foo.Users的东西.这会产生某种循环依赖.

我在Foo.Shared中定义了一个接口,代理我正在使用的依赖注入框架(在本例中为NInject).

public interface IDependencyResolver
{
    T Get<T>();
}
Run Code Online (Sandbox Code Playgroud)

在容器应用程序中,我有一个这个接口的实现:

public class DependencyResolver:IDependencyResolver
{
    private readonly IKernel _kernel;

    public DependencyResolver(IKernel kernel)
    {
        _kernel = kernel;
    }

    public T Get<T>()
    {
        return _kernel.Get<T>();
    }
}
Run Code Online (Sandbox Code Playgroud)

配置如下所示:

public class MyModule:StandardModule
{
    public override void Load()
    {
        Bind<IDependencyResolver>().To<DependencyResolver>().WithArgument("kernel", Kernel);
        Bind<Foo.Shared.ISomeType>().To<Foo.Payment.SomeType>(); // <- binding to different assembly
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许我Foo.Payment.SomeType从Foo.Users内部实例化一个新对象,而无需直接引用:

public class UserAccounts:IUserAccounts
{ …
Run Code Online (Sandbox Code Playgroud)

c# design-patterns dependency-injection ninject

8
推荐指数
1
解决办法
885
查看次数

通用重载决议

我有以下场景:

class Foo { }

class Foo<T> : Foo { }
Run Code Online (Sandbox Code Playgroud)

然后是两种方法

void DoStuff(Foo foo) 
{
     DoStuffImpl(foo);
}

void DoStuffImpl(Foo foo) 
{ 
     Console.WriteLine("A");
}    
void DoStuffImpl<T>(Foo<T> foo) 
{ 
     Console.WriteLine("B");
} 

void Main() 
{
     DoStuff(new Foo<int>()); // prints A
}
Run Code Online (Sandbox Code Playgroud)

(注意,代码是在浏览器中编写的,但描述了我面临的情况)

如何让它调用泛型方法,然后打印B?

这可以在没有反思的情况下完成吗?关于如何用反射完成,我有一些想法,但我正在寻找一个更清洁的解决方案,如果存在的话.

注意:我不能创建DoStuff泛型,因为这将与WCF一起使用,并且不允许打开泛型类型.

c# generics overloading

7
推荐指数
2
解决办法
2279
查看次数

浏览器后退按钮和动态元素

我有一个页面,它使用jQuery <input>根据用户从<select>框中选择的内容动态创建大量DOM元素.

假设用户从选择框中选择4,我的脚本动态显示4个输入框.

问题是当用户刷新或返回此页面时(使用浏览器后退按钮).动态创建的元素不会重新填充到它们的最后值,而所有其他"静态"元素都是.

我想我可以创建一个隐藏的输入,通过javascript与动态框的内容序列化,然后在$ document.ready上读取它,然后重新填充我的框.

有没有更好的办法?

javascript jquery dom

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

依赖注入和工厂

试图找出如何最好地处理以下场景:

假设一个RequestContext依赖于外部服务的类,例如:

public class RequestContext : IRequestContext
{
    private readonly ServiceFactory<IWeatherService> _weatherService;

    public RequestContext(ServiceFactory<IWeatherService> weatherService, UserLocation location, string query)
    {
       _weatherService = weatherService;
       ...
Run Code Online (Sandbox Code Playgroud)

我应该在最终实例化的类中需要什么样的依赖RequestContext?它可能是ServiceFactory<IWeatherService>,但这似乎不对,或者我可以创建一个IRequestContextFactory以下的线:

public class RequestContextFactory : IRequestContextFactory
{
    private readonly ServiceFactory<IWeatherService> _weatherService;

    public RequestContextFactory(ServiceFactory<IWeatherService> weatherService)
    {
        _weatherService = weatherService;
    }

    public RequestContext Create(UserLocation location, string query)
    {
        return new RequestContext(_weatherService, location, query);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后传递IRequestContextFactory构造函数注入.

这似乎是一种很好的方法,但这种方法的问题在于我认为它阻碍了可发现性(开发人员必须了解工厂并实施它,这并不是很明显).

我错过了更好/更可发现的方式吗?

c# dependency-injection factory-pattern

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

jQuery Watermarked输入和验证

在HTML页面上,我有一个输入框,当它为空时,上面有一个"水印".(例如:"在这里输入文字......").有点像这样:http://digitalbush.com/projects/watermark-input-plugin/ - 但是自定义写的.

问题是我无法弄清楚如何使用jQuery验证插件(http://docs.jquery.com/Plugins/Validation/)验证此字段,以便它将我的水印文本视为字段为空.

我在jQuery验证器中找不到一个选项让我为字段有效时指定一个自定义规则,有吗?我可以找到允许我指定是否需要根据自定义逻辑验证字段的选项,而不是如何验证字段.

我错过了什么?

validation jquery watermark

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

代表对代表性能过分是一个坏主意吗?

请考虑以下代码:

if (IsDebuggingEnabled) { 
   instance.Log(GetDetailedDebugInfo()); 
}
Run Code Online (Sandbox Code Playgroud)

GetDetailedDebugInfo() 可能是一种昂贵的方法,所以我们只想在调试模式下运行时调用它.

现在,更清洁的替代方案是编写如下代码:

instance.Log(() => GetDetailedDebugInfo());
Run Code Online (Sandbox Code Playgroud)

其中.Log()的定义如下:

public void Log(Func<string> getMessage)
{
    if (IsDebuggingEnabled) 
    {
        LogInternal(getMessage.Invoke());
    }
}
Run Code Online (Sandbox Code Playgroud)

我关心的是性能,初步测试没有显示第二种情况特别昂贵,但如果负载增加,我不想遇到任何意外.

哦,请不要建议条件编译,因为它不适用于这种情况.

(PS:我直接在StackOverflow中写了代码问一个问题textarea所以不要责怪我,如果有微妙的错误,它没有编译,你明白了:)

.net c# performance lambda delegates

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

ASP.NET MVC ModelBinder不使用GET请求和/或jQuery AJAX?

当通过GET而不是POST调用时,我似乎遇到了让MVC填写我的自定义模型参数的问题.

我有一个JavaScript代码段,可以调用这样的动作:

$.getJSON('<%= Url.Action("DoSearch") %>' + location.search,
    function(data) {
        if (data.Result == "OK") {
            location.href = location.href;
        }
    });
Run Code Online (Sandbox Code Playgroud)

它的作用基本上是调用一个单独的动作,传递与调用页面相同的查询字符串.然后,如果结果为"OK",则刷新当前页面.

该操作的定义如下:

    public ActionResult DoSearch(SearchParameters searchParameters)
Run Code Online (Sandbox Code Playgroud)

该模型是:

public class SearchParameters
{
    public string Query;
    ...
}
Run Code Online (Sandbox Code Playgroud)

调用URL(用firebug验证)就像/DoSearch?Query=some+query.(也尝试/DoSearch?searchParameters.Query=some+query没有成功)

无论我尝试什么,我的参数总是显示为空(不为空,只是所有参数都被初始化为默认值)

如果我定义这样的动作:

    public ActionResult DoSearch(string Query, ...)
Run Code Online (Sandbox Code Playgroud)

然后我的参数被正确填充.然而,不是模型.

我假设:

a)填充对象模型对GET请求不起作用.

b)我做错了什么

有任何想法吗?谢谢.

ajax asp.net-mvc jquery modelbinder

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