小编Sco*_*ell的帖子

POST后重新加载浏览器窗口,而不提示用户重新发送POST数据

当用户访问我的网站时,每个页面上都有一个"登录"链接.单击此按钮可使用一些JavaScript显示覆盖窗口,提示用户提供其凭据.输入这些凭证后,将对Web服务器进行Ajax调用以验证它们; 如果它们有效,则会发回验证票证cookie并重新加载页面,以便显示特定于已验证用户或(现在)当前登录用户的页面上的任何内容.

我正在使用以下脚本完成页面重新加载:

window.location.reload();
Run Code Online (Sandbox Code Playgroud)

这非常适用于通过GET请求(绝大多数)加载的页面,但有些页面使用回发表单.因此,如果用户转到其中一个页面,执行回发,然后选择登录,则在window.location.reload()脚本运行时会通过对话框提示是否要重新提交POST正文.

重新提交POST正文对话框

我想绕过这个我可以告诉浏览器重新加载页面,所以我试过:

window.location.href = window.location.href;
Run Code Online (Sandbox Code Playgroud)

但浏览器不会对上述语句采取任何操作,我认为是因为它认为新URL与旧URL相同.如果我将以上内容更改为:

window.location.href = window.location.pathname;
Run Code Online (Sandbox Code Playgroud)

它重新加载页面,但我丢失了任何查询字符串参数.

我当前的解决方法已经足够了,但并不漂亮 - 简而言之,我将查询字符串参数添加到当前window.location.href值,然后window.location.href通过调用将其分配回来reloadPage("justLoggedIn"),其中reloadPage函数是:

function reloadPage(querystringTackon) {
    var currentUrl = window.location.href;

    if (querystringTackon != null && querystringTackon.length > 0 && currentUrl.indexOf(querystringTackon) < 0) {
        if (currentUrl.indexOf("?") < 0)
            currentUrl += "?" + querystringTackon;
        else
            currentUrl += "&" + querystringTackon;
    }

    window.location.href = currentUrl;
}
Run Code Online (Sandbox Code Playgroud)

这可行,但它会导致URL www.example.com/SomeFolder/SomePage.aspx?justLoggedIn,这似乎很俗气.

在JavaScript中是否有办法让它进行GET重新加载而不提示用户重新提交POST数据?我需要确保任何现有的查询字符串参数都不会丢失.

javascript

54
推荐指数
5
解决办法
11万
查看次数

IIS7 URL重写:如何不从重写的URL中删除HTTPS协议?

我正在一个使用IIS 7的URL重写功能的网站上进行从example.com到www.example.com的永久重定向,以及从类似域名重写到"主要"域名,例如来自www. examples.com到www.example.com.

这个重写规则 - 如下所示 - 已经有一段时间了.但是,我们最近添加了HTTPS支持,并注意到如果用户访问要重写到www.example.com的其中一个URL,则会删除HTTPS.例如,如果用户访问https://example.com,则会将其重定向到http://www.example.com,而我们希望将其发送到https://www.example.com.

这是感兴趣的重写规则(在Web.config中):

<rule name="Canonical Host Name" stopProcessing="true">
    <match url="(.*)" />

    <conditions logicalGrouping="MatchAny">
        <add input="{HTTP_HOST}" pattern="^example\.com$" />
        <add input="{HTTP_HOST}" pattern="^(www\.)?example\.net$" />
        <add input="{HTTP_HOST}" pattern="^(www\.)?example\.info$" />
        <add input="{HTTP_HOST}" pattern="^(www\.)?examples\.com$" />
    </conditions>

    <action type="Redirect" url="http://www.example.com/{R:1}" redirectType="Permanent" />
</rule>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,动作元素的URL直接属性点到http://,所以我知道为什么https://example.com会被重定向到http://www.example.com.我的问题是,我该如何解决这个问题?我试图(天真地)从url属性中删除http://部分,但这不起作用.

iis-7 url-rewriting

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

如果另一个线程正在执行它,则退出方法

我在多线程应用程序中有一个方法,并且在调用此方法时我想要以下行为:

  1. 如果当前没有其他线程正在执行该方法,请执行它.
  2. 如果另一个线程当前正在执行该方法,则退出该方法而不执行它.

lockC#中的语句对于等待线程完成执行很有用,但是我不希望序列化对此方法的访问,而是绕过执行所述方法(如果它正由另一个线程执行).

c# thread-safety

14
推荐指数
2
解决办法
2076
查看次数

在定义之后将属性添加到匿名JavaScript类型?

我知道在JavaScript中你可以向现有类型添加新属性(比如Date),但是可以在定义匿名类型后添加新属性吗?

例如,假设我有以下脚本:

var employee = {
    'Name': 'Scott',
    'Age': 32,
    'JavaScriptNewbie': true
};
Run Code Online (Sandbox Code Playgroud)

稍后在我的脚本中,我想为这个雇员对象添加一个新属性(比如Salary).那可能吗?

TIA!

javascript

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

如何根据MVCContrib Grid的数据设置行的样式?

我正在修改MVCContrib网格,并坚持如何基于数据格式化网格中的一行数据.

例如,假设我们有一个产品网格,其中每个产品都有数据字段,如名称,价格和已停产.我想强调所有已停产的产品行.

一种解决方法是在客户端使用jQuery将CSS类应用于已停止的单元格为TRUE的那些行,但这似乎是一个脆弱的解决方案.我希望有一种方法可以通过Html.Grid方法调用在服务器端执行此操作.

谢谢

asp.net-mvc mvccontrib mvccontrib-grid

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

是否可以从自定义显示或编辑器模板访问其他元数据信息?

据我所知,在自定义显示或编辑模板,我可以得到关于通过模型元数据ViewData.ModelMetadata,它具有指示是否一定的元数据属性已为属性定义的属性,如IsRequired,DisplayName等.但无论如何我可以访问我通过自定义属性添加到属性的自定义元数据吗?

例如,在我看来,我有一个像这样的属性:

[UIHint("Whizbang")]
[SomeAttribute("foobar")]
public string LeftWhizbang { get; set; }
Run Code Online (Sandbox Code Playgroud)

我有一个名为Whizbang.cshtml以下内容的自定义显示模板:

@model string

Left Whizbang Value: @Model
Run Code Online (Sandbox Code Playgroud)

我想要做的是能够确定属性是否用属性LeftWhizbang修饰SomeAttribute,如果是,我想访问属性的Message属性(比如),即值"foobar".

我希望能够在我的模板中做到这样的事情:

@model string

Left Whizbang Value: @Model

@{
    SomeAttributeAttribute attr = ViewData.ModelMetadata.GetAttributes(...);
    if (attr != null)
    {
        <text>... and the value is @attr.Message</text>
    }
}
Run Code Online (Sandbox Code Playgroud)

这一切都是可能的,还是我看着死胡同?

asp.net-mvc-3

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

为什么忽略.hgignore?

我对Hg很新,所以请原谅我的无知......

我在Windows 7中使用Mercurial和TortoiseHg.我创建了一个具有以下文件夹结构的存储库:

-- My repo dir
|
|--- .hg
|--- .hgignore
|--- File 1
|--- File 2
|--- ...
Run Code Online (Sandbox Code Playgroud)

我的数据库数据文件存在于repo目录中,但我不希望它们作为存储库的一部分包含在内.我已经在.hgignore文件中尝试了各种各样的东西,但无论我在Windows Shell中右键单击repo文件夹并转到Hg Commit...,它都包含要提交的文件列表中的两个数据库数据文件.是的,我可以手动取消选中它们,但我的想法是,因为.hgignore它们不会被包含在要提交的文件列表中.

这是我目前的化身.hgignore,虽然我尝试了其他一些没有运气的人:

MyDatabase\.mdf
MyDatabase\_log\.ldf
Run Code Online (Sandbox Code Playgroud)

我在这里愚蠢,还是TortoiseHg .hgignore在提交时不尊重/检查文件?

更新:

终于有了这个工作.正如@Diego建议的那样,我不得不指示Mercurial忘记这些文件.有趣的是,当我按照@ Diego的建议并试图通过命令行忘记它们时,它没有用.我必须转到Windows资源管理器,右键单击文件,然后从上下文菜单中选择TortoiseHg - >忘记文件...

感谢大家的建议.

mercurial tortoisehg

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

为什么这个路由参数被添加到查询字符串中?

我有一个ASP.NET MVC 3应用程序,它记录用户的计步器条目.用户可以通过访问查看所有最新计步器条目/Pedometer,并通过访问像URL可以按年,年/月,或年/月/日筛选/Pedometer/2011,/Pedometer/2011/08/Pedometer/2011/08/15分别.

我在中创建了两个映射路由Global.asax.第一条路由(如下所示)允许各种URL模式按日期过滤.第二个路由(未显示)是默认的ASP.NET MVC路由.

routes.MapRoute(
    "PedometerEntries", // Route name
    "Pedometer/{year}/{month}/{day}", // URL with parameters
    new
    {
        controller = "Pedometer",
        action = "Index",
        year = UrlParameter.Optional,
        month = UrlParameter.Optional,
        day = UrlParameter.Optional
    }, // Parameter defaults
    new
    {
        year = @"\d{4}",
        month = @"([012]?\d{1})?",
        day = @"(([1-9])|([12][0-9])|(3[0-1]))?"
    } // Parameter constraints
);
Run Code Online (Sandbox Code Playgroud)

这是我的问题.我有一个视图,我想创建一个表单的链接:currentUrl?format=csv,这将允许用户以CSV格式下载所请求的URL的计步器条目.因此,如果用户正在访问/Pedometer,则下载链接将是/Pedometer?format=csv.如果用户正在访问,/Pedometer/2011/08则下载链接将是/Pedometer/2011/08?format=csv.

为了创建这样的链接,我添加了一个DownloadToExcel使用以下代码命名的自定义Html Helper :

public static …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-routing

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

为什么此查询在存储过程中返回不同的结果?

概要

我有一个带有WHERE子句的查询,该子句包含一个条件,该条件针对可能为NULL的参数检查NULLable列,如下所示:

SELECT ...
FROM Table
WHERE NullableColumn = @NullableParameter
Run Code Online (Sandbox Code Playgroud)

根据我的理解,SQL Server应该NULL = NULL non-NULL = NULL总是评估为false,这意味着如果@NullableParameter为NULL则上述查询将返回零记录.

这是我在查询窗口中运行查询时看到的行为,但是当我在存储过程中使用相同的查询时,当@NullableParameter为NULL时,它返回所有记录NullableColumn为NULL.简而言之,似乎sproc说的NULL = NULL是真的.

这就是问题/问题.实际WHERE条款涉及更多,并在下面的部分中提供更多细节.

坚韧不拔的细节

我有一个名为StudyResults的数据库.每个记录由StudyResultId主键字段唯一标识.还有一个ParticipantId字段,表示研究中涉及的主题,并且GroupId标识该主题属于哪个组(如果有的话).如果该研究是单人研究,GroupId则为NULL.ParticipantId不能为NULL.

我有一个存储过程,需要更新StudyResults表中某些特定研究的记录,但这里有一点 - 如果研究是单人研究,那么我需要更新那一行; 如果是小组研究,我想更新该组的StudyResults中的所有行.

这不是很难完成.传递存储过程a StudyResultId然后运行以下T-SQL以确定该行的值GroupIdParticipantId值:

DECLARE @GroupId INT, @ParticipantId INT
SELECT @GroupId = GroupId,
       @ParticipantId = ParticipantId
FROM StudyResults
WHERE StudyResult …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures

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

为什么Type.GetElementType返回null?

我有一个方法,将输入参数作为类型的对象IEnumerable.我想枚举枚举,并为每个项目使用反射来获取每个属性的值.

我有以下代码:

protected void WriteData(IEnumerable data)
{
    var enumerationTypeInfo = data.GetType();
    var itemTypeInfo = enumerationTypeInfo.GetElementType();

    ...
}
Run Code Online (Sandbox Code Playgroud)

问题enumerationTypeInfo.GetElementType()始终是回归null.特别是,我正在List<Entry>进入WriteData,Entry我在哪里创建了一个类.当我使用调试器并设置断点时,我可以看到它enumerationTypeInfo正确显示它是一个类型列表Entry,但为什么会GetElementType返回null

谢谢

c# reflection

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