我想从一个动作返回一个View(),结果响应应该有一个text/xml的内容类型而不是默认的text/html.
我尝试过以下方法但没有成功:
Response.ContentType = "text/xml";
return View();
Run Code Online (Sandbox Code Playgroud)
我知道您可以通过返回来指定内容类型ContentResult
,但这不会呈现我的视图.
我希望我不需要将视图呈现为字符串然后使用return Content()
,所以我可能会忽略一些简单的方法.
我遇到了一个情况,我有一个非常大的文件,我需要从中读取二进制数据.
因此,我意识到.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) 请考虑以下路线:
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
?
对依赖注入很新,我试图弄清楚这是否是反模式.
假设我有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) 我有以下场景:
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一起使用,并且不允许打开泛型类型.
我有一个页面,它使用jQuery <input>
根据用户从<select>
框中选择的内容动态创建大量DOM元素.
假设用户从选择框中选择4,我的脚本动态显示4个输入框.
问题是当用户刷新或返回此页面时(使用浏览器后退按钮).动态创建的元素不会重新填充到它们的最后值,而所有其他"静态"元素都是.
我想我可以创建一个隐藏的输入,通过javascript与动态框的内容序列化,然后在$ document.ready上读取它,然后重新填充我的框.
有没有更好的办法?
试图找出如何最好地处理以下场景:
假设一个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
构造函数注入.
这似乎是一种很好的方法,但这种方法的问题在于我认为它阻碍了可发现性(开发人员必须了解工厂并实施它,这并不是很明显).
我错过了更好/更可发现的方式吗?
在HTML页面上,我有一个输入框,当它为空时,上面有一个"水印".(例如:"在这里输入文字......").有点像这样:http://digitalbush.com/projects/watermark-input-plugin/ - 但是自定义写的.
问题是我无法弄清楚如何使用jQuery验证插件(http://docs.jquery.com/Plugins/Validation/)验证此字段,以便它将我的水印文本视为字段为空.
我在jQuery验证器中找不到一个选项让我为字段有效时指定一个自定义规则,有吗?我可以找到允许我指定是否需要根据自定义逻辑验证字段的选项,而不是如何验证字段.
我错过了什么?
请考虑以下代码:
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所以不要责怪我,如果有微妙的错误,它没有编译,你明白了:)
当通过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)我做错了什么
有任何想法吗?谢谢.
c# ×5
asp.net-mvc ×3
jquery ×3
performance ×2
.net ×1
ajax ×1
binaryreader ×1
delegates ×1
dom ×1
generics ×1
javascript ×1
lambda ×1
modelbinder ×1
ninject ×1
overloading ×1
pointers ×1
unsafe ×1
validation ×1
watermark ×1
xml ×1