小编Ian*_*oyd的帖子

重定向后 - 使用ASP.NET获取

如何使用ASP.NET 实现Post-Redirect-Get模式?

按钮单击执行一些处理:

<asp:Button id="bbLaunch" OnCommand="bbLaunch_Click" />
Run Code Online (Sandbox Code Playgroud)

用户点击按钮,启动航天器,重新显示网页.如果用户按下F5,他们会收到警告:

在此输入图像描述

该问题的解决方案是Post-Redirect-Get模式.

PRG可以在ASP.NET中实现的方法是什么?


问题围绕以下问题:

  • 如何<asp:Button>执行一个POST不是原始形式的地方?
  • 当您发布到不读取视图状态的表单时,ViewState会变成什么?
  • 当您重定向到"真正的"aspx Web表单时,ViewState会变成什么?
  • 的ViewState与根本不相容的ASP.net后重定向消息得到什么?
  • ASP.net从根本上与Post-Redirect不兼容- Get
  • 你如何(即什么代码)重定向到"真正的"aspx Web表单?
  • 如何(即什么网址)你重定向到"真正的"aspx网页表单?关系问题提到Response.Redirect(Request.RawUrl);
  • 什么时候(即在什么事件处理程序中)你重定向到"真正的"aspx Web表单?
  • 相关问题引发如何发布表单数据的问题.这意味着无法使用HTML 表单 - 并且必须将所有表单数据添加到查询字符串中.这是真的?如果是这样,为什么?如果没有,为什么不呢?可以在浏览器把表单数据的查询字符串?
  • 一个相关的问题提到Server.Transfer.使用Server.Transfer是完全错误的,决不会解决Post-Redirect-Get问题(因为没有重定向).正确?
  • 在支持PRG的文件aspxaspx.cs文件中必须进行哪些代码更改?据推测,至少,代码必须改为post其他地方MyPage.aspx.

换句话说:你如何在ASP.net中进行重定向后获取?

注意:ASP.net(即不是ASP.net MVC) …

asp.net redirect-after-post post-redirect-get

41
推荐指数
4
解决办法
2万
查看次数

UPDATE失败,因为以下SET选项具有不正确的设置:'QUOTED_IDENTIFIER'

我遇到了更新存储过程的问题.错误是:

UPDATE失败,因为以下SET选项具有不正确的设置:'QUOTED_IDENTIFIER'.验证SET选项是否正确,以便与计算列和/或查询通知和/或xml数据类型方法的索引视图和/或索引一起使用.

SQL状态:42000本
机错误:1934

遗憾的是,此表没有索引视图,计算列或查询通知.这个存储过程在过去几天运行良好,并且从今天起一直在返回此错误.

是否有任何建议有助于确定问题?

注:如果我设置quoted_identifierON并重新运行CREATE PROCEDURE,这个问题将是固定的(现在).但我想先了解是什么引发了这个问题.

sql-server-2005

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

我应该如何防守?

我正在使用一个用于创建数据库连接的小例程:

之前

public DbConnection GetConnection(String connectionName)
{
   ConnectionStringSettings cs= ConfigurationManager.ConnectionStrings[connectionName];
   DbProviderFactory factory = DbProviderFactories.GetFactory(cs.ProviderName);
   DbConnection conn = factory.CreateConnection();
   conn.ConnectionString = cs.ConnectionString;
   conn.Open();

   return conn;
}
Run Code Online (Sandbox Code Playgroud)

然后我开始研究.NET框架文档,看看各种事物的记录行为是什么,看看我是否可以处理它们.

例如:

ConfigurationManager.ConnectionStrings...
Run Code Online (Sandbox Code Playgroud)

文件说,打电话的ConnectionStrings抛出一个ConfigurationErrorException如果无法检索集合.在这种情况下,我无法处理此异常,所以我会放手.


下一部分是ConnectionStrings的实际索引,以查找connectionName:

...ConnectionStrings[connectionName];
Run Code Online (Sandbox Code Playgroud)

在这种情况下,ConnectionStrings文档说如果找不到连接名,该属性将返回null.我可以检查是否发生了这种情况,并抛出一个例外,让某人高兴他们给了一个无效的connectionName:

ConnectionStringSettings cs= 
      ConfigurationManager.ConnectionStrings[connectionName];
if (cs == null)
   throw new ArgumentException("Could not find connection string \""+connectionName+"\"");
Run Code Online (Sandbox Code Playgroud)

我重复同样的练习:

DbProviderFactory factory = 
      DbProviderFactories.GetFactory(cs.ProviderName);
Run Code Online (Sandbox Code Playgroud)

GetFactory方法对如果指定一家工厂发生了什么没有文档ProviderName找不到.它没有记录返回null,但我仍然可以防御,并检查 null:

DbProviderFactory factory = …
Run Code Online (Sandbox Code Playgroud)

c# defensive-programming exception-handling

38
推荐指数
4
解决办法
2448
查看次数

SQL Server:无法在程序集中找到类型

假设程序集dll:

using Microsoft.SqlServer.Server;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System;
using System.Text;

namespace CLRFunctions
{
    public class T
    {
        [SqlFunction(DataAccess = DataAccessKind.Read)]
        public static String NormalizeString(String s, String normalizationForm)
        {
            NormalizationForm form = NormalizationForm.FormC;

            if (String.Equals(f, "FormD", StringComparison.OrdinalIgnoreCase))
                form = NormalizationForm.FormD;

            return = s.Normalize(form);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:将程序集目标指向.NET 3.5,因为SQL Server不支持.NET 4.0

将程序集复制到一个位置,"创建"程序集工作正常:

CREATE ASSEMBLY CLRFunctions FROM 'c:\Program Files\My App\CLRFunctions.dll';
Run Code Online (Sandbox Code Playgroud)

注:然后启用CLR函数,否则会被打破 默认:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO …
Run Code Online (Sandbox Code Playgroud)

sql-server sqlclr user-defined-functions sql-server-2008-r2

38
推荐指数
1
解决办法
2万
查看次数

为什么64位Windows无法解除用户内核用户异常?

为什么64位Windows在异常期间不能展开堆栈,如果堆栈跨越内核边界 - 当32位Windows可以?

整个问题的背景来自:

消失的OnLoad异常 - x64中的用户模式回调异常的情况

背景

在32位Windows中,如果我在我的用户模式代码中抛出异常,那是从内核模式代码调用的,这是从我的用户模式代码调用的,例如:

User mode                     Kernel Mode
------------------            -------------------
CreateWindow(...);   ------>  NtCreateWindow(...)
                                   |
WindowProc   <---------------------+                                   
Run Code Online (Sandbox Code Playgroud)

Windows中的结构化异常处理(SEH)可以展开堆栈,通过内核模式展开回到我的用户代码,在那里我可以处理异常,并且我看到有效的堆栈跟踪.

但不是在64位Windows中

64位版本的Windows无法执行此操作:

由于复杂的原因,我们无法在64位操作系统(amd64和IA64)上传播异常.自从Server 2003的第一个64位版本发布以来,情况一直如此.在x86上,情况并非如此 - 异常通过内核边界传播,并最终将帧移回

由于在这种情况下无法回溯可靠的堆栈跟踪,因此必须做出决定:让您看到非荒谬的异常,或者完全隐藏它:

当时的内核架构师决定采用保守的AppCompat友好方法 - 隐藏异常,并希望最好.

本文接着讨论了所有64位Windows操作系统的表现如何:

  • Windows XP 64位
  • Windows Server 2003 64位
  • Windows Vista 64位
  • Windows Server 2008 64位

但是从Windows 7(和Windows Server 2008)开始,架构师改变了主意 - 有点像.对于 64位应用程序(不是32位应用程序),它们(默认情况下)会停止抑制这些用户内核用户异常.所以,默认情况下,在:

  • Windows 7 64位
  • Windows Server 2008

所有64位应用程序都会看到这些异常,他们从来没有看到它们.

在Windows 7中,当本机x64应用程序以这种方式崩溃时,将通知 …

windows 64-bit structured-exception windows64 windows-appcompat-platform

37
推荐指数
2
解决办法
4410
查看次数

使用同义词与视图有什么优缺点?

这是一个通用的数据库设计问题 - 在简单的视图中,在数据库开发中使用同义词有什么好处?在两者之间进行选择时要记住哪些主要考虑因素?

示例视图:

CREATE VIEW Users AS
SELECT * FROM IdentitySystem.dbo.Users
Run Code Online (Sandbox Code Playgroud)

和同等的同义词:

CREATE SYNONYM Users 
FOR IdentitySystem.dbo.LCTs
Run Code Online (Sandbox Code Playgroud)

sql database database-design

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

Javascript字符串如何不是对象?

这不是一个笑话的设置,我真的在问.

Douglas Crockford喜欢说在javascript原型面向对象语言中没有必要new.

他解释说,这new只是为了让人们从基于类(即" 经典 ")的面向对象编程语言中获得某种程度的安慰:

JavaScript,我们很难new

JavaScript是一种原型语言,但它有一个new运算符,试图使它看起来有点像经典语言.这往往会使程序员感到困惑,从而导致一些有问题的编程模式.

您永远不需要new Object()在JavaScript中使用.请改用对象文字{}.

好的:

  • new
  • {}

但是后来评论者VítorDeAraújo指出这两者并不相同.他给出了一个例子,表明a string不像object:

字符串对象和字符串值不是同一个东西:

js> p = "Foo"
Foo
js> p.weight = 42
42
js> p.weight // Returns undefined

js> q = new String("Foo")
Foo
js> q.weight = 42
42
js> q.weight
42
Run Code Online (Sandbox Code Playgroud)

字符串值不能具有新属性.同样的事情对其他类型也有效.

这里发生了什么string不是一个object?我是否混淆了javascript与其他一些语言,其中一切都是对象?

javascript

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

在ASP.net中是否有一个After Page_Load事件

所有 Page_Load事件完成后是否会触发事件?

我怎么能有一个以上Page_Load
当您有用户控件时.

在我的页面可以渲染之前,我需要我的页面(以及所有嵌入式控件)通过完成他们的Page_Load事件来初始化自己.

当然,问题是如果我把代码放在我的页面Page_Load处理程序中:

MyPage.aspx
   --> Page_Load
          ---> DoSomethingWithUserControl()
UserControl1.ascx
   --> Page_Load
          ---> initialize ourselves now that viewstate has been restored
Run Code Online (Sandbox Code Playgroud)

然后我开始UserControl1在准备好之前访问我的控件.

我需要一种方法来所有Page_Load事件被触发运行代码,但任何回发事件(例如Click事件)被触发之前:

MyPage.aspx
   --> Page_Load
UserControl1.ascx
   --> Page_Load
          ---> initialize ourselves now that viewstate has been restored
MyPage.aspx
   --> Page_AfterLoad
          ---> DoSomethingWithUserControl()
Run Code Online (Sandbox Code Playgroud)

查看MSDN中的页面生命周期,看起来在完成所有Page_Loads 无法引发事件:

在此输入图像描述

有没有一种方法后,引发后,所有Page_Loads已经完成?

asp.net page-lifecycle pageload

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

如何将datetime转换为datetimeoffset?

如何将SQL Server datetime值转换为datetimeoffset值?


例如,现有表包含datetime全部处于"本地"服务器时间的值.

SELECT TOP 5 ChangeDate FROM AuditLog

ChangeDate
=========================
2013-07-25 04:00:03.060
2013-07-24 04:00:03.073
2013-07-23 04:00:03.273
2013-07-20 04:00:02.870
2013-07-19 04:00:03.780
Run Code Online (Sandbox Code Playgroud)

我的服务器(恰好)(现在,今天)比UTC晚了四个小时(现在,在美国东部时区,夏令时处于活动状态):

SELECT SYSDATETIMEOFFSET()

2013-07-25 14:42:41.6450840 -04:00
Run Code Online (Sandbox Code Playgroud)

我想将存储的datetime值转换为datetimeoffset值; 使用服务器的当前时区偏移信息.

想要的价值观是:

ChangeDate               ChangeDateOffset
=======================  ==================================
2013-07-25 04:00:03.060  2013-07-25 04:00:03.0600000 -04:00
2013-07-24 04:00:03.073  2013-07-24 04:00:03.0730000 -04:00
2013-07-23 04:00:03.273  2013-07-23 04:00:03.2730000 -04:00
2013-07-20 04:00:02.870  2013-07-20 04:00:02.8700000 -04:00
2013-07-19 04:00:03.780  2013-07-19 04:00:03.7800000 -04:00
Run Code Online (Sandbox Code Playgroud)

你可以看到理想的特征:

2013-07-19 04:00:03.7800000 -04:00
--------------------------- …
Run Code Online (Sandbox Code Playgroud)

sql-server internationalization sql-server-2008-r2

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

wsMaximized表单似乎没有最大化

将表单设置为WindowState = wsMaximized有时会使表单最大化但不会:

在此输入图像描述

长期错误:这是我在2003年首次在Borland新闻组中提出的一个问题:

然后在2006年:

然后在2008年再次:

有人在2012年的Embarcadero论坛上提出这个问题:

现在是时候将18岁的bug移植到Stackoverflow了.也许某人终于想出了一个解决方法.

重现的步骤:

我的帖子包含了六种失败模式,但最简单的是:

  • 删除表单上的a LabelEdita:

    在此输入图像描述

  • 为以下内容添加OnEnter活动TEdit:

    procedure TForm1.Edit1Enter(Sender: TObject);
    begin
       Label1.Font.Style := Label1.Font.Style + [fsBold];
    end;
    
    Run Code Online (Sandbox Code Playgroud)
  • 并设置表格:

    • WindowStatewsMaximized
    • AutoScroll

而bazinga,失败了.

2008年帖子的另一组步骤之一:

  1. 创建一个新的应用程序和一个表单.
  2. 在设计时将表单设置为最大化(WindowState = wsMaximized).
  3. 删除窗体上的ListView控件
  4. 在OnShow期间,将20个空项添加到列表视图中:

    procedure TForm1.FormShow(Sender: TObject);
    var
         i: Integer;
    begin
         for i := 1 to 20 do
              ListView1.Items.Add;
    
    end;
    
    Run Code Online (Sandbox Code Playgroud)
  5. 在设计时将表单的AutoScroll属性设置为false(AutoScroll = False)

当然,我没有追求的是"在n …

delphi vcl delphi-7 delphi-5

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