国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

ASP.NET AJAX RC Tip:頁(yè)面中無(wú)UpdatePanel時(shí)UpdateProgress創(chuàng)建出錯(cuò)問(wèn)題

2019-11-18 16:47:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  昨日下午,IM上遇到菌哥,被問(wèn)到為什么安裝asp.net Ajax RC之后,某些頁(yè)面總是在創(chuàng)建UpdatePRogress時(shí)出現(xiàn)腳本錯(cuò)誤。當(dāng)時(shí)給了一個(gè)不太好的解決方案,剛才簡(jiǎn)單看了一下System.Web.Extensions.dll中的相關(guān)實(shí)現(xiàn),得出了一個(gè)更好的解決方案,在這里簡(jiǎn)單地說(shuō)一下。

  首先,我模擬一個(gè)“事發(fā)現(xiàn)場(chǎng)”,由此開(kāi)始解決問(wèn)題:一般來(lái)說(shuō),在所有的頁(yè)面中可能需要統(tǒng)一的Updating Animation,于是可能會(huì)將一個(gè)UpdateProgress連同ScriptManager放在MasterPage中,如下:

Site.master
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug">
</asp:ScriptManager>

<asp:ContentPlaceHolder id="Main" runat="server"></asp:ContentPlaceHolder>

<asp:UpdateProgress ID="UpdateProgress1" runat="server">
    <ProgressTemplate>
        Hello World!
    </ProgressTemplate>
</asp:UpdateProgress>
 
 

  如果直接以此生成一個(gè)頁(yè)面,并隨意加上一個(gè)UpdatePanel:

Default.aspx
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">

    <asp:UpdatePanel runat="server">
        <ContentTemplate>
            ...
        </ContentTemplate>
    </asp:UpdatePanel>

</asp:Content>
 
 

  此時(shí)生成的HTML為:

HTML
...
<form>
...
    <script src="/AjaxEnabledWebSite/WebResource.axd?..."
 type="text/javascript"></script>

    <!-- MicrosoftAjax.js -->
    <script src="/AjaxEnabledWebSite/ScriptResource.axd?..."
 type="text/Javascript"></script>

    <!-- MicrosoftAjaxWebForms.js -->
    <script src="/AjaxEnabledWebSite/ScriptResource.axd?..."
 type="text/javascript"></script>

...
    <script type="text/javascript">
        <!--
        Sys.application.initialize();
        Sys.Application.add_init(function() {
            $create(
  Sys.UI._UpdateProgress,
  {"associatedUpdatePanelId":null,
   "displayAfter":500,
   "dynamicLayout":true},
   null,
   null,
   $get("ctl00_UpdateProgress1"));
        });
        // -->
    </script>
...
</form>
...
 
 

  請(qǐng)注意此時(shí)的UpdateProgress以一個(gè)Sys.UI.Control的形式使用$create被創(chuàng)建,而Sys.UI._UpdateProgress(看來(lái)ASP.NET AJAX不希望我們直接使用這個(gè)類(lèi))是在MicrosoftAjaxWebForms.js文件里被引入。

  于是問(wèn)題就出現(xiàn)了,如果頁(yè)面中沒(méi)有UpdatePanel,那么MicrosoftAjaxWebForms.js文件不會(huì)被引入,而那句$create還在!這就導(dǎo)致了JavaScript錯(cuò)誤的發(fā)生。當(dāng)時(shí)我提供的方法是:那么就在Site.master里強(qiáng)制加上一個(gè)UpdatePanel吧。如下:

強(qiáng)制UpdatePanel
<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="UP1">
    <ContentTemplate></ContentTemplate>
</asp:UpdatePanel>
 
 

  這里把UpdateMode設(shè)為了Conditional,也就是說(shuō),這里的UpdatePanel永遠(yuǎn)不會(huì)被更新,它的作用只是“強(qiáng)迫”MicrosoftAjaxWebForms.js文件被引入。不過(guò)這不是個(gè)好的解決方案。

  如果要解決這個(gè)問(wèn)題,不要讓$create語(yǔ)句出現(xiàn)不就可以了嗎?在查看過(guò)代碼以后,發(fā)現(xiàn)$create語(yǔ)句只會(huì)在ScriptManager的EnablePartialRendering屬性為T(mén)rue的情況下出現(xiàn),那么我們就把ScriptManager的這個(gè)屬性暴露出去吧。我們可以修改一下Site.master.cs中Site類(lèi)的代碼,把它增加一個(gè)屬性:

Site.master.cs
public bool EnablePartialRendering
{
    get
    {
        return this.ScriptManager1.EnablePartialRendering;
    }
    set
    {
        this.ScriptManager1.EnablePartialRendering = value;
    }
}
 
 

  然后在頁(yè)面里把MasterPage的EnablePartialRendering屬性設(shè)為False即可。需要注意的是只有Init階段才能設(shè)置ScriptManager的EnablePartialRendering屬性。如下:

Default.aspx.cs
protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    (this.Master as Site).EnablePartialRendering = false;
}
 
 

  至此,任務(wù)結(jié)束。

http://www.survivalescaperooms.com/JeffreyZhao/archive/2006/12/20/597416.html


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 邵阳县| 玉屏| 沂南县| 乃东县| 阳新县| 苏尼特左旗| 尚志市| 克东县| 北安市| 喜德县| 虎林市| 江安县| 阿巴嘎旗| 淅川县| 双柏县| 彝良县| 高安市| 即墨市| 阿克| 小金县| 革吉县| 阜新| 麻栗坡县| 贵溪市| 台南县| 沙田区| 诸城市| 合山市| 体育| 萍乡市| 名山县| 西和县| 格尔木市| 台安县| 扶余县| 柳河县| 花垣县| 彰武县| 濉溪县| 林州市| 阳山县|