1

asp.netを5年以上使用しています。しかし、今は奇妙な問題に直面しています。コードページにasp:button、asp:textboxなどを含む自分で作成したフォームからメールを送信しようとすると、常にIsPostBackがfalseになります。[メールを送信]ボタン(asp.netボタン)をクリックしても。何が問題なのか理解できません。

ポストバックのためにweb.configファイルに必要なものはありますか?

テストページhttp://buyerrs.com/Test.aspx

テストページでは問題ないことを確認してください。これは、vbにボタンとコードが1つしかない非常に通常のページだからです。キャッシュ、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ファイルです

最後に、エラーが発生する場所を見つけましたこのWebサイトのコードは、このhttp://www.datafeedscripts.net/default.aspxソフトウェアに基づいています。彼らは3つのdllファイル(vchsite.dll、vchLicense.dll、vchbasesite.dll)を使用しており、以下のhttpmoduleコードを持っています

<httpModules>
    <add name="vchHttpModule" type="VchBaseSite.vchHttpModule" />

そのdllを除外し、web.configファイルのポストバックからhttpmodule行を削除すると正常に機能します。したがって、これはエラーです。彼らは彼らのDLLファイルまたはhttpmoduleで何か間違ったことをしました。

しかし、それでもエラーとは何かを理解することはできません。dllファイルからポストバックアクションを制御する機会はありますか?

4

6 に答える 6

2

これは少し古いことはわかっていますが、HttpModule を確認します。vchHttpModule がリクエストをハイジャックし、IsPostBack を無効にしている可能性があります。

于 2014-02-01T01:51:18.873 に答える
0

ポストバックしたらページのソースを見ると、次のようになります。

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">
...

DOCTYPEの前に「IsPostBack:False..」の宣伝文句が配置されているのは一体どういうことか。Protected Sub Page_Loadイベントハンドラーをチェックし、構文が正しいことなどを確認します。これは、本来あるべき前に起動している可能性があり、IsPostBackの正しい状態を取得していない可能性があるためです。

于 2012-02-10T20:53:09.243 に答える
0

処理するクリック イベントがなく、代わりに送信ボタンとして機能しているため、ポストバックは生成されません。

http://www.w3schools.com/aspnet/prop_webcontrol_button_usesubmitbehavior.asp

送信動作をオフにします。

于 2012-02-10T20:41:12.563 に答える
0

ここにもある 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()));
        }

C# から VB へ

アップデート

コントロールの値も取得できないため、_requestValueCollection が null であると思われます。_requestValueCollection は、投稿された値とクエリ文字列値のコレクションです。それでも、これは問題を解決しません..

于 2012-02-10T22:14:16.963 に答える
0

Page タグで AutoEventWireup を true に設定してみてください。

于 2012-02-10T21:24:11.763 に答える
0

私は1つの考えを理解していません。AutoEventWireup を false に設定しています。つまり、PageLoad が呼び出されていませんが、それが呼び出されていると言います...有線...おそらく他のクラスがロードされています。ここで何かが混同されています。

AutoEventWireup="false"

これを true にして結果を確認できますか?

于 2012-02-10T20:55:29.413 に答える