IsPostback всегда ложно, когда я нажимаю кнопку или любую другую
Использую asp.net уже более 5 лет. Но сейчас я столкнулся со странной проблемой. Когда я пытаюсь отправить электронные письма из созданной мной формы, которая содержит asp: button, asp: textbox и т. Д., В кодовой странице всегда указывается значение IsPostBack false. Даже когда я нажимаю кнопку "Отправить письмо" (кнопка asp.net). Я не могу понять, в чем проблема.
Что-нибудь нужно в файле web.config для обратной передачи??
Тестовая страница http://buyerrs.com/Test.aspx
Уверен, это не проблема на тестовой странице. Потому что это очень обычная страница, на которой есть только одна кнопка и код в vb. Проблема где-то в кеше, urlrewrite или web.config. Но я не могу понять, где?
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configSections>
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
</sectionGroup>
</sectionGroup>
</sectionGroup>
</configSections>
<system.web>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
<httpModules>
<add name="vchHttpModule" type="VchBaseSite.vchHttpModule" />
</httpModules>
<!-- need to increase the size of the permitted upload size -->
<httpRuntime maxRequestLength="20480" />
<!-- set compilation debug="false" for running application -->
<compilation debug="true" strict="false" explicit="true" defaultLanguage="vb">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
</compilation>
<trace enabled="false" pageOutput="true" localOnly="true" />
<sessionState mode="Off" />
<!-- customErrors mode="On|Off|RemoteOnly" -->
<customErrors mode="Off">
<error statusCode="404" redirect="404.aspx" />
<error statusCode="500" redirect="500.html" />
</customErrors>
<pages enableViewState="false">
<namespaces>
<clear />
<add namespace="System" />
<add namespace="System.Collections" />
<add namespace="System.Collections.Generic" />
<add namespace="System.Configuration" />
<add namespace="System.IO" />
<add namespace="System.IO.Compression" />
<add namespace="System.Linq" />
<add namespace="System.Text" />
<add namespace="System.Web" />
<add namespace="System.Web.Security" />
<add namespace="System.Web.UI.WebControls" />
<add namespace="System.Web.UI" />
<add namespace="System.Xml.Linq" />
</namespaces>
<controls>
<add tagPrefix="vch" namespace="VchBaseSite" assembly="VchBaseSite" />
</controls>
</pages>
<!-- set code access security trust level - this is generally set in the machine.config
<trust level="Medium" originUrl=".*" />-->
<machineKey
validationKey="CF19275EF5E6206C1E289BAC5240240548B1015A2A68137B411A08E2F2BFE55223C42B1FECB10B6A660CD00DEE02F005959D7E4929660A81CF756E69BF3F56C8"
decryptionKey="A32BD7AEDF208B05B85828E644774810C928F5F76A6AD0A50F982EBD235634A3"
validation="SHA1" decryption="AES"
/>
<authentication mode="None" />
<roleManager>
<providers>
<clear />
</providers>
</roleManager>
</system.web>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<providerOption name="CompilerVersion" value="v3.5" />
<providerOption name="WarnAsError" value="false" />
</compiler>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<providerOption name="CompilerVersion" value="v3.5" />
<providerOption name="OptionInfer" value="true" />
<providerOption name="WarnAsError" value="false" />
</compiler>
</compilers>
</system.codedom>
<!--
The system.webServer section is required for running ASP.NET AJAX under Internet
Information Services 7.0. It is not necessary for previous version of IIS.
-->
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<!--
<defaultDocument>
<files>
<clear />
<add value="default.aspx" />
<add value="Default.aspx" />
<add value="default.htm" />
<add value="Default.htm" />
</files>
</defaultDocument> -->
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v2.0.50727">
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
</dependentAssembly>
</assemblyBinding>
<connectionStrings>
<remove name="LocalSqlServer" />
</connectionStrings>
</runtime>
</configuration>
это файл web.config
Наконец я нашел, где ошибка растет. Этот код веб-сайта основан на этом http://www.datafeedscripts.net/default.aspx программном обеспечении. Они используют три DLL-файла (vchsite.dll, vchLicense.dll, vchbasesite.dll) и имеют код httpmodule ниже
<httpModules>
<add name="vchHttpModule" type="VchBaseSite.vchHttpModule" />
Когда я исключаю, что DLL и удалить строку httpmodule из файла обратной передачи web.config работает нормально. Так что это ошибка. Они сделали что-то не так в своих файлах Dll или httpmodule.
Но до сих пор не могу понять, что такое ошибка. Есть ли шанс контролировать действия обратной передачи из DLL-файлов?
6 ответов
Я знаю, что это немного устарело, но я бы проверил HttpModule. Модуль vchHttpModule может перехватить запрос и сделать недействительным IsPostBack.
У вас нет события click для обработки, и вместо этого оно работает как кнопка отправки, которая не будет генерировать постбэки.
http://www.w3schools.com/aspnet/prop_webcontrol_button_usesubmitbehavior.asp
Отключить отправку поведения.
Попробуйте установить для AutoEventWireup значение true в теге Page.
Глядя на источник вашей страницы, когда вы отправляете пост, я вижу:
IsPostBack : False on 2/10/2012 3:50:06 PM
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
...
Как, черт возьми, это объявление "IsPostBack: False..." перед вашим DOCTYPE. Проверьте ваш обработчик событий Protected Sub Page_Load и убедитесь, что он имеет правильный синтаксис и т. Д., Потому что кажется, что он запускается раньше, чем должен, и, следовательно, не получает правильное состояние IsPostBack.
Я не понимаю, один думаю. У вас есть AutoEventWireup в false, это означает, что PageLoad не вызывается, но вы говорите, что он вызывается... wired... может быть, загружен какой-то другой класс, здесь что-то смешалось.
AutoEventWireup="false"
Можете ли вы превратить это в истину, чтобы увидеть результаты?
Я взглянул на реализацию IsPostBack MS, которую также можно найти здесь.
С помощью отражения вы можете "прочитать" каждое значение, используемое в этих операторах if.
К сожалению, я использую C#, я надеюсь, что вы можете перевести его на VB
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(IsPostBack.ToString() + " " + DateTime.Now.ToShortDateString());
Response.Write("<br />");
//return this._requestValueCollection != null && (this._isCrossPagePostBack
//|| (!this._pageFlags[8] && (this.Context.ServerExecuteDepth <= 0
// || (this.Context.Handler != null && !(base.GetType() != this.Context.Handler.GetType()))) && !this._fPageLayoutChanged));
var pType = this.GetType();
while (pType.Name != "Page")
pType = pType.BaseType;
var _requestValueCollection = pType.GetField("_requestValueCollection", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this);
Response.Write("_requestValueCollection: " + (_requestValueCollection != null).ToString());
Response.Write("<br />");
var _isCrossPagePostBack = pType.GetField("_isCrossPagePostBack", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this);
Response.Write("_isCrossPagePostBack: " + _isCrossPagePostBack);
Response.Write("<br />");
var _pageFlags = pType.GetField("_pageFlags", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this);
Response.Write("_pageFlags: " + (((int)_pageFlags.GetType().GetField("data", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(_pageFlags) & 8) == 8));
Response.Write("<br />");
//SimpleBitVetctor32
var cType = this.Context.GetType();
var ServerExecuteDepth = cType.GetProperty("ServerExecuteDepth", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this.Context, null);
Response.Write("ServerExecuteDepth: " + ServerExecuteDepth.ToString());
Response.Write("<br />");
Response.Write("Context_Handler: " + (this.Context.Handler != null));
Response.Write("<br />");
var _fPageLayoutChanged = pType.GetField("_fPageLayoutChanged", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this);
Response.Write("_fPageLayoutChanged: " + _fPageLayoutChanged.ToString());
Response.Write("<br />");
Response.Write("base.GetType() != this.Context.Handler.GetType())) " + (base.GetType() != this.Context.Handler.GetType()));
}
Обновить
Поскольку вы также не можете получить значения элементов управления, я подозреваю, что _requestValueCollection имеет значение null. _requestValueCollection - это коллекция опубликованных значений и значений строки запроса. Тем не менее это не решает проблему..