WebResource.axd не отображается в HTML - PullRequest
2 голосов
/ 09 февраля 2010

У меня проблемы с использованием элемента управления updateprogress в ASP.NET. Я успешно создал небольшой проект с использованием этого элемента управления, но когда я создал простую страницу .aspx в своем решении, используя тот же код, он не работает. Существует несоответствие в отображаемом HTML-коде, где он не работает, отсутствуют разделы, например,

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTQ0OTI0ODUwMg9kFgICAw9kFgICBQ9kFgJmD2QWAgIDDw8WAh4EVGV4dAVqMTc6Mjc6MzA8YnIgLz4xNzoyNzozMDxiciAvPjE3OjI3OjMwPGJyIC8+MTc6Mjc6MzA8YnIgLz4xNzoyNzozMDxiciAvPjE3OjI3OjMwPGJyIC8+MTc6Mjc6MzA8YnIgLz4xNzoyNzozMGRkZIkvHCekERlfS9y4PA2asxGaEowE" />

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>

<script src="/WebResource.axd?d=xwJ8mgqm3wQN2acMjQykvA2&amp;t=633941258702151333" type="text/javascript"></script>

Sys.WebForms.PageRequestManager._initialize('ScriptManager1', document.getElementById('form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tUpdatePanel1'], [], [], 90);

У кого-нибудь была эта проблема? Может быть, мне не хватает ссылки на javascript?

Вот настройка HTML для страницы

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="UpdateProgressTest._Default" %>

<!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" > 
   <head id="Head1" runat="server"> 
    <title>Update Progress</title> 
   </head> 

   <body> 
       <form id="form1" runat="server">
       <div>
       <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
       Some page content<br/>

       <asp:UpdateProgress ID="UpdateProgress1" runat="server" DynamicLayout="true" AssociatedUpdatePanelID="UpdatePanel1">
            <ProgressTemplate> Processing… </ProgressTemplate>
       </asp:UpdateProgress> 

       More page content<br />

       <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
           <ContentTemplate> <div style="border-style:solid;background-color:gray;">
                <asp:Button ID="Button1" runat="server" Text="Update"/><br/><br/>
                <asp:Label runat="server" ID="time1"></asp:Label><br/></div><br/>
           </ContentTemplate>
       </asp:UpdatePanel><br/>
       </div> 
       </form>
   </body> 
</html> 

Вот код C # позади раздела для той же страницы:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace UpdateProgressTest
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            System.Threading.Thread.Sleep(4000);
            // base.OnLoad(e);

            string theTime = DateTime.Now.ToLongTimeString();
            for (int i = 0; i < 3; i++)
            {
                theTime += "<br />" + theTime;
            }

            time1.Text = theTime; 
        }
    }
}

Как я уже сказал, этот код отлично работает в моем тестовом проекте, но не работает, когда я использую его в своем решении (я создал новую страницу, просто чтобы убедиться, что мои другие элементы управления не мешают механизму ajax обратного вызова) *

Может кто-нибудь помочь?

Ответы [ 3 ]

1 голос
/ 10 февраля 2010

Что вы увидите, если запросите файл WebResource.asxd (с параметрами строки запроса) напрямую (или если вы используете FireBug , перейдите на вкладку «Сценарии» и просмотрите содержимое сценария)?

Возможно, ваш новый проект не имеет правильных настроек в web.config для правильного обслуживания этого ресурса - сравните оба файла web.config проектов, особенно раздел <httpHandlers> - у вас должно быть что-то вроде:

<add path="WebResource.axd" verb="GET"
     type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
1 голос
/ 09 февраля 2010

Мне всегда полезно явно указывать поведение элементов управления MS AJAX. Начните с установки свойства DisplayAfter на что-то маленькое (например, 1) в элементе управления UpdateProgress. Кроме того, для ChildrenAsTriggers установите значение true для UpdatePanel1, чтобы убедиться, что он выполняет вызов AJAX при нажатии кнопки Button1.

Иногда, когда я не указываю эти вещи, элементы управления AJAX не ведут себя так, как я ожидаю.

0 голосов
/ 10 февраля 2010

Я просто выяснил это: D.

Проблема была в файле web.config, как предложил Жаф, - Бен Дугид. Это было старое решение, поэтому я обновил его с .net 1.1, поэтому он имел

<xhtmlConformance mode="Legacy"/> 

под узлом в web.config.

Я изменил это на

<xhtmlConformance mode="Transitional"/> 

и все заработало: D Более подробную информацию о настройке рендеринга Xhtml на веб-сайтах asp.net можно найти здесь

...