updatepanel __ dopostback поражает .update (), но не обновляется

Использование глобального макета слушателя всегда хорошо работало для меня. Преимущество состоит в том, что он может перезаписывать вещи при изменении макета, например, если что-то установлено на View.GONE или дочерние представления добавляются / удаляются.

public void onCreate(Bundle savedInstanceState)
{
     super.onCreate(savedInstanceState);

     // inflate your main layout here (use RelativeLayout or whatever your root ViewGroup type is
     LinearLayout mainLayout = (LinearLayout ) this.getLayoutInflater().inflate(R.layout.main, null); 

     // set a global layout listener which will be called when the layout pass is completed and the view is drawn
     mainLayout.getViewTreeObserver().addOnGlobalLayoutListener(
       new ViewTreeObserver.OnGlobalLayoutListener() {
          public void onGlobalLayout() {
               //Remove the listener before proceeding
               if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    mainLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
               } else {
                    mainLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
               }

               // measure your views here
          }
       }
     );

     setContentView(mainLayout);
 }
1
задан DaVinciCoder 19 June 2009 в 00:12
поделиться

2 ответа

Ну, я исправил эту проблему. Я перешел на использование следующего метода для вызова doPostBack.

http://encosia.com/2007/07/13/easily-refresh-an-updatepanel-using-javascript/

Надеюсь, это поможет.

1
ответ дан 3 September 2019 в 01:21
поделиться

Проверьте это http://www.4guysfromrolla.com/articles/012506-1.aspx

Короче говоря, (1) существует свойство «SubmitDisabledControls» формы или (2) откорректировать предоставленный автором javascript

-121--3603998-

Я сдался в конце концов и подключился к библиотеке проверки JQuery, а не с помощью Microsoft ASP.NET MVC 2 RC и файла библиотеки

В этой статье описывается процесс: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

Таким образом, с проверкой JQuery в действительности все, что мне нужно было сделать, это сделать вызов valid ()...

$('form').submit(function() {
    if ($('form').valid()) {
        $('input[type=submit]', this).attr('disabled', 'disabled');
        ShowBusy();
    }
});
-121--3950606-

Я вижу, вы ответили на свой собственный вопрос, но для других, вместо doPostBack (), почему бы не установить оба таймера для обновления через указанный интервал или как метод события Tick с «UpdatePanel1.Update ()» в конце метода? Для этого пути необходимо задать интервал в самом коде страницы Default.aspx; Я выбрал 10 мс, чтобы он мог показать прогресс для очень быстрой операции:

<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="360000" />
<asp:Button ID="btnDoSomething" runat="server" Text="Do Something" OnClick="btnDoSomething_Click" />
 <asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load" UpdateMode="conditional"> 
    <ContentTemplate>
        <span id="spnLabel" runat="server">
        <asp:Timer ID="Timer1" runat="server" Interval="10" OnTick="Timer1_Tick"></asp:Timer> 
    </ContentTemplate>         
    <Triggers >
        <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
    </Triggers>
 </asp:UpdatePanel> 

Тогда у вас есть метод Timer1_Tick в коде позади, который вы вызываете при обновлении - в этом примере что-то добавить в spnLabel.IniveHtml из метода btnDoSomething_Click ():

protected void btnDoSomething_Click(object sender, EventArgs e)
{
     Timer1.Enabled = true;
     Timer1.Interval = 10;
     Timer1_Tick(sender, e);
     Timer1.Enabled = false;
}
protected void Timer1_Tick(object sender, EventArgs e)
{
     spnLabel.InnerHtml = "hi";
     UpdatePanel1.Update();
}

Помните, что обновлением управляет интервал таймера, а не когда вы вызываете Timer1_Tick (отправитель, e), даже если у вас есть UpdatePanel1.Update () в конце - например, если вы устанавливаете интервал 10000, он будет обновляться через 10 секунд, даже если ваша операция использовала метод Timer1_Tick () несколько раз до этого. Вам все равно понадобится UpdatePanel1.Update () в конце, независимо, хотя.

-Том

1
ответ дан 3 September 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: