我一定错过了一些关于cookie的基本知识.在本地主机上,当我设置在服务器端的cookie,并明确指定域为localhost(或.localhost).某些浏览器似乎没有接受cookie.
Firefox 3.5:我在Firebug中检查了HTTP请求.我看到的是:
Set-Cookie:
name=value;
domain=localhost;
expires=Thu, 16-Jul-2009 21:25:05 GMT;
path=/
Run Code Online (Sandbox Code Playgroud)
或者(当我将域设置为.localhost时):
Set-Cookie:
name=value;
domain=.localhost;
expires=Thu, 16-Jul-2009 21:25:05 GMT;
path=/
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,都不会存储cookie.
IE8:我没有使用任何额外的工具,但cookie似乎也没有存储,因为它不会在后续请求中发回.
Opera 9.64: localhost和.localhost都工作,但是当我检查Preferences中的cookie列表时,域名设置为localhost.local,即使它列在localhost下(在列表分组中).
Safari 4: localhost和.localhost都可以工作,但它们在Preferences中始终列为.localhost.另一方面,没有显式域的cookie,它显示为localhost(无点).
localhost有什么问题?由于存在这么多的不一致,必须有一些涉及localhost的特殊规则.另外,我不完全清楚为什么域名必须以点为前缀?RFC 2109明确声明:
Domain属性的值不包含嵌入点或不以点开头.
为什么?该文件表明它必须对安全做些什么.我不得不承认我没有阅读整个规范(稍后可能会这样做),但听起来有点奇怪.基于此,在localhost上设置cookie是不可能的.
通常在ASP.NET视图中,可以使用以下函数来获取URL(而不是a <a>):
Url.Action("Action", "Controller");
Run Code Online (Sandbox Code Playgroud)
但是,我无法从自定义HTML帮助程序中找到如何执行此操作.我有
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
}
}
Run Code Online (Sandbox Code Playgroud)
辅助变量具有Action和GenerateLink方法,但它们生成了<a>.我在ASP.NET MVC源代码中做了一些挖掘,但我找不到一种简单的方法.
问题是上面的Url是视图类的成员,并且对于它的实例化,它需要一些上下文和路由映射(我不想处理它,我不应该这样做).或者,HtmlHelper类的实例也有一些上下文,我假设它是Url实例的上下文信息子集的晚餐(但我不想再处理它).
总而言之,我认为这是可能的,但是由于我可以看到的所有方式,涉及一些或多或少的内部ASP.NET内容的操作,我想知道是否有更好的方法.
编辑:例如,我看到的一种可能性是:
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
urlHelper.Action("Action", "Controller");
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不对.我不想自己处理UrlHelper的实例.必须有一个更简单的方法.
有没有一种廉价的方式来获得图像的尺寸(jpg,png,...)?最好,我想只使用标准类库(因为托管限制)来实现这一点.我知道读取图像标题并自己解析它应该相对容易,但似乎这样的东西应该已经存在了.此外,我已经验证以下代码片段读取整个图像(我不想要):
using System;
using System.Drawing;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Image img = new Bitmap("test.png");
System.Console.WriteLine(img.Width + " x " + img.Height);
}
}
}
Run Code Online (Sandbox Code Playgroud) 正确对齐单选按钮/复选框与文本的最简洁方法是什么?到目前为止我唯一可靠的解决方案是基于表格:
<table>
<tr>
<td><input type="radio" name="opt"></td>
<td>Option 1</td>
</tr>
<tr>
<td><input type="radio" name="opt"></td>
<td>Option 2</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
有些人可能会对此不屑一顾.我花了一些时间(再次)调查一个无表格的解决方案,但失败了.我尝试了浮动,绝对/相对定位和类似方法的各种组合.不仅如此,他们主要依赖于单选按钮/复选框的估计高度,但它们在不同浏览器中的表现也不同.理想情况下,我想找到一个解决方案,它不会假设大小或特殊的浏览器怪癖.我很喜欢使用表格,但我想知道还有其他解决方案.
我将在一段时间内扮演一个魔鬼的拥护者.我一直在想为什么浏览器检测(与特征检测相反)被认为是一种不好的做法.如果我测试某个版本的某个浏览器并确认,某个功能的行为是以某种可预测的方式进行的,那么决定做特殊情况似乎没问题.原因在于它将来会万无一失,因为这部分浏览器版本不会改变.另一方面,如果我检测到DOM元素具有函数X,则不一定意味着:
我只是偷看了jQuery源代码,他们通过在DOM中插入一个精心构建的HTML片段然后检查它的特定功能来进行特征检测.这是一种明智而坚实的方式,但我会说,如果我在我的小小的个人JavaScript(没有jQuery)中做了类似的事情,那将会有点太沉重.它们还具有几乎无限的QA资源的优势.另一方面,你经常看到人们做的是他们检查函数X的存在,然后基于此,他们假设函数将在具有此函数的所有浏览器中以某种方式运行.
我没有说任何意义上的功能检测不是一件好事(如果使用得当),但我想知道为什么浏览器检测通常会立即被解雇,即使它听起来合乎逻辑.我想知道这是否是另一个时髦的事情.
在ASP.NET MVC视图中是否有用于转义JavaScript的实用程序函数?我经常需要使用视图中的一些值来初始化一小段JavaScript; 例如,我可能有类似的东西:
<script type="text/javascript">
var page = new Page({ currentUser: "<%= Model.UserName %>" });
page.init();
</script>
Run Code Online (Sandbox Code Playgroud)
我希望有类似的东西:
<script type="text/javascript">
var page = new Page({ currentUser: "<%= Html.JavaScriptEscape(Model.UserName) %>" });
page.init();
</script>
Run Code Online (Sandbox Code Playgroud)
当然,我可以自己编写这个函数.但是因为已经有内置的实用程序形成HTML编码,并且因为ASP.NET MVC的一个卖点是<%%>是默认的渲染模式,因为我想要实现的是很常见的,它让我想知道为什么我找不到已经内置的东西.例如,是否有一种简单而优雅的方法可以在视图中将对象序列化为JSON?
或者我正在做一些针对ASP.NET MVC原则的事情?当我遇到这样的问题时,通常会让我认为我做错了,因为我认为框架设计师花了一些时间思考现实场景.
是否可以通过ADO.NET访问SQL Server"副产品消息"?由于缺少单词,"副产品消息"是指Microsoft SQL Server Management Studio的"消息"选项卡中显示的输出.我特别想到的是读取SET STATISTICS TIME ON的输出.看来SqlDataReader在这个问题上没有提供任何东西.
我碰巧检查了我们正在构建的ASP.NET MVC应用程序的性能.我打算将一个局部视图插入循环中,出于好奇,我检查了渲染页面所需的时间.结果并不好.
我需要做更多的结论性调查,但是如果有人有类似的问题或更多的洞察力,这就是我到目前为止所做的.首先,我应该说所有结果和测量都是在多次页面加载后完成的,并且我已经<compilation debug="false">在web.config中设置了.
<my:UserContol runat="server" />)包含相同的局部视图时,额外的60ms就会消失.因此,基于上面的观察,似乎罪魁祸首是BuildManager.CreateInstanceFromVirtualPath方法.也许,这并不意味着多次被召唤.Webforms可能不会使用它; 或者以某种方式使用它只为每个ascx一次?
我在笔记本电脑上设置了一个新的开发环境,由于某种原因,"导航到"功能(CTRL +逗号)不起作用.它与Visual Studio的完全相同的解决方案(C#)和完全相同的Visual Studio版本完全相同.它被困在"找到0匹配结果",而小进度条停留在那里但是是空的.
有没有人有同样的问题?
我希望.sln旁边会有某种类型的智能感知缓存文件,但我发现的只是一个.suo文件,我删除但它没有帮助.
更新:我刚刚注意到新的解决方案有一些丢失的文件(我们不在SVN中存储配置文件).这会让人感到困惑吗?另一方面,我几乎可以肯定我们之前丢失了文件,这不是问题.
IIS支持两种类型的压缩:静态内容压缩和动态内容压缩.根据applicationHost.config,它们由不同的模块处理:DynamicCompressionModule(compdyn.dll)和StaticCompressionModule(compstat.dll),它们被配置为压缩不同类型的请求.另外,我猜测动态压缩不会缓存压缩请求而不是静态压缩(默认情况下,压缩文件会保存到%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files).
然而,除了那些明显的差异,我怀疑还有别的东西.我认为他们以一种稍微不同的方式挂钩到IIS管道.有人会更深入了解一些细节吗?
我发现的方式是我正在使用自定义模块来动态修改CSS文件.当打开静态压缩(并设置为处理默认文件集,即text/css)时,在缓存请求中,我的自定义模块被提供了已经gzip压缩的内容.当我将text/css移动到动态压缩请求列表时,它全部开始工作.但我希望有一个更加坚实的证据,证明它确实是正确的方法.还有其他已知的后果/问题吗?
更新:我想我可能有一个关于它为什么会发生的理论.它可能不是100%正确,但它至少可以解释观察到的行为.我认为静态压缩模块将自己注册到以下事件(在其他事件中):
RQ_MAP_REQUEST_HANDLER
RQ_EXECUTE_REQUEST_HANDLER
Run Code Online (Sandbox Code Playgroud)
然后,当提供对静态文件的请求时,OnMapRequestHandler中的静态压缩模块检查文件之前是否已被压缩以及实际文件是否未被更改.如果是这样,它将重新将请求映射到自身(使用IMapHandlerProvider返回适当的重定向).当它稍后在OnExecuteRequestHandler中实际提供响应时,它会发送压缩文件.另一方面,如果文件之前没有被压缩或者它已经被更改,它不会执行映射重定向并让静态内容模块提供请求,然后在OnPostExecuteRequestHandler中压缩内容(并更新其缓存) .如上所述,我并不是说这正是发生的事情(我不知道源代码),它可能只是一个近似值.此外,动态压缩模块最不可能执行任何此操作.它只是在RQ_EXECUTE_REQUEST_HANDLER之后有时压缩传出的响应.
asp.net-mvc ×3
html ×2
.net ×1
ado.net ×1
c# ×1
checkbox ×1
cookies ×1
css ×1
dom ×1
gzip ×1
html-helper ×1
httpmodule ×1
iis-7 ×1
image ×1
javascript ×1
radio-button ×1
setcookie ×1
sql-server ×1
url ×1