2015-09-15 2 views
0

Я использую bootstrap modal для сохранения и обновления каких-либо событий. Мой жерех код:Bootstrap modal не работает должным образом

<asp:UpdatePanel ID="upModal" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" id="myModal" aria-labelledby="myLargeModalLabel"> 
      <div class="modal-dialog"> 
       <div class="modal-content"> 
        <div class="modal-header"> 
         <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
         <h4 class="modal-title" id="gridSystemModalLabel">Add event:</h4> 
        </div> 
        <div class="modal-body"> 
         <div class="container-fluid"> 
          <div class="row"> 
           <div class="col-md-3"> 
            <div class="row"> 
             <div class="col-md-12"> 
              <h4>Date:</h4> 
             </div> 
             <div class="col-md-12"> 
              <asp:TextBox ID="TextBoxDate" runat="server" Width="100" CssClass="rbl"></asp:TextBox> 
              <asp:ImageButton ID="ImageButton2" ImageUrl="~/calendar.png" CssClass="rbl" runat="server" Height="20" Width="20" /> 
              <ajaxToolkit:CalendarExtender ID="CalendarExtender2" TargetControlID="TextBoxDate" runat="server" PopupButtonID="ImageButton2" Format="dd/MM/yyyy" /> 
             </div> 
            </div> 
           </div> 
           <div class="col-md-3"> 
            <div class="row"> 
             <div class="col-md-12"> 
              <h4>List</h4> 
             </div> 
             <div class="col-md-12"> 
              <asp:ListBox ID="ListBoxEgk" runat="server"></asp:ListBox> 
             </div> 
            </div> 
           </div> 
           <div class="col-md-3"> 
            <div class="row"> 
             <div class="col-md-12"> 
              <h4>info from:</h4> 
             </div> 
             <div class="col-md-12"> 
              <asp:TextBox ID="name" runat="server"></asp:TextBox> 
             </div> 
             <div class="col-md-12"> 
              <h4>to:</h4> 
             </div> 
             <div class="col-md-12"> 
              <asp:ListBox ID="ListBoxEpik" runat="server"></asp:ListBox> 
             </div> 
            </div> 
           </div> 
           <div class="col-md-3"> 
            <div class="row"> 
             <div class="col-md-12"> 
              <h4>Kind of event:</h4> 
             </div> 
             <div class="col-md-12"> 
              <asp:ListBox ID="ListBoxEidosSum" runat="server"></asp:ListBox> 
             </div> 
            </div> 
           </div> 
          </div> 
          <div class="row"> 
           <div class="col-md-5"> 
            <div class="col-md-12"> 
             <h4>Event desc:</h4> 
            </div> 
            <div class="col-md-12"> 
             <asp:TextBox ID="TextBoxSumvan" runat="server" Height="210px" MaxLength="500" Rows="12" Width="380px" TextMode="MultiLine"></asp:TextBox> 
            </div> 
           </div> 
           <div class="col-md-5"> 
            <div class="col-md-12"> 
             <h4>Actions:</h4> 
            </div> 
            <div class="col-md-12"> 
             <asp:TextBox ID="TextBoxE" runat="server" Height="210px" MaxLength="500" Rows="12" Width="380px" TextMode="MultiLine"></asp:TextBox> 
            </div> 
           </div> 
           <div class="col-md-2"> 
            <div class="col-md-12"> 
             <h4>Given to:</h4> 
            </div> 
            <div class="col-md-12"> 
             <asp:ListBox ID="ListBoxUsers" runat="server"></asp:ListBox> 
            </div> 
           </div> 
          </div> 
         </div> 
        </div> 
        <div class="modal-footer"> 
         <asp:Button ID="cancelBtn" CssClass="btn btn-default" runat="server" data-dismiss="modal" Text="Ακύρωση" OnClick="cancelBtn_Click" /> 
         <asp:Button ID="saveBtn" runat="server" Text="Αποθήκευση" CssClass="btn btn-primary" OnClick="Btn_save_Click" /> 
        </div> 
       </div> 

      </div> 
     </div> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Я "вызова" это модальность по:

img ID="addEvent" src="/very-basic-plus-icon.png" data-toggle="modal" data-target=".bs-example-modal-lg" Height="20" Width="20" /> 

и она работает. Модальный показывается, и до того, как я использовал <asp:Updatepanel>, он работал идеально, но я хочу, чтобы иметь возможность выбирать события из сетки и показывать этот модальный, обновлять их, если мне нужно и т. Д. Кнопка изображения ниже вызывает метод из-за

<asp:ImageButton ID="imgEdit" ImageUrl="~/edit.png" runat="server" OnClick="imgEdit_Click" /> 

и что работает из-за это:

static Boolean indexY = false; 
    static newEvent event4Update = new newEvent(); 
    protected void imgEdit_Click(object sender, ImageClickEventArgs e) 
    { 
     GridViewRow gvRow = (GridViewRow)(sender as Control).Parent.Parent; 
     int index = gvRow.RowIndex; 
     var item = searchEvents.ElementAt(index); 

     CMMS_IServiceClient client = new CMMS_IServiceClient(); 
     event4Update = client.returnRowForUpdate(item.RowId);    
     client.Close(); 

     TextBoxDate.Text = Convert.ToString(event4Update.ImerominiaSumvantos); 
     name.Text = event4Update.Name; 
     ListBoxEgk.SelectedValue = event4Update.From; 
     ListBoxEpik.SelectedValue = event4Update.TroposEpikoinwnias; 
     UserListBox.SelectedValue = event4Update.AssignmentTo; 
     TextBoxSumvan.Text = event4Update.Sumvan; 
     ListBoxEidosSum.SelectedValue = event4Update.TypeOfEvent; 
     TextBoxEnergeies.Text = event4Update.Actions; 
     ListBoxUsers.SelectedValue = event4Update.To; 

     indexY = true; 
     ScriptManager.RegisterStartupScript(Page, Page.GetType(), "myModal", "$('#myModal').modal();", true); 
     upModal.Update(); 

    } 

Банкоматы мой модальное работает идеально. Все загружено, и я могу редактировать, но когда я нажимаю save, который находится внутри моего модального, есть проблемы.

protected void Btn_save_Click(object sender, EventArgs e) 
    { 
     CMMS_IServiceClient client = new CMMS_IServiceClient(); 
     if (ListBoxEgk.SelectedValue.ToString() == "" || 
      ListBoxEpik.SelectedValue.ToString() == "" || 
      TextBoxSumvan.Text == "" || 
      ListBoxEidosSum.SelectedValue.ToString() == "") 
     {     
      Page.ClientScript.RegisterStartupScript(GetType(), "Scripts", "<script>alert('Some field is empty.');</script>"); 
     } 
     else 
     { 
      if (indexY == true) 
      { 
       IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true); 
       newEvent updateEvent = new newEvent(); 
       updateEvent.RowId = event4Update.RowId; 
       updateEvent.ImerominiaSumvantos = DateTime.Parse(TextBoxDate.Text, culture, System.Globalization.DateTimeStyles.AssumeLocal); 
       updateEvent.Name = name.Text; 
       updateEvent.From = ListBoxEgk.SelectedValue.ToString(); 
       updateEvent.TroposEpikoinwnias = ListBoxEpik.SelectedValue.ToString(); 
       updateEvent.To = UserListBox.SelectedValue.ToString(); 
       updateEvent.Sumvan = TextBoxSumvan.Text; 
       updateEvent.TypeOfEvent = ListBoxEidosSum.SelectedValue.ToString(); 
       updateEvent.Actions = TextBoxEnergeies.Text; 
       updateEvent.AssignmentTo = ListBoxUsers.SelectedValue.ToString(); 
       updateEvent.EventState = (TextBoxEnergeies.Text != "") ? true : false; 
       client.updateRow(updateEvent); 
       indexY = false; 
       event4Update = null; 
      } 
      else 
      { 
       IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true); 
       newEvent addEvent = new newEvent(); 
       addEvent.ImerominiaSumvantos = DateTime.Parse(TextBoxDate.Text, culture, System.Globalization.DateTimeStyles.AssumeLocal); 
       addEvent.Name = name.Text; 
       addEvent.From = ListBoxEgk.SelectedValue.ToString(); 
       addEvent.TroposEpikoinwnias = ListBoxEpik.SelectedValue.ToString(); 
       addEvent.To = UserListBox.SelectedValue.ToString(); 
       addEvent.Sumvan = TextBoxSumvan.Text; 
       addEvent.TypeOfEvent = ListBoxEidosSum.SelectedValue.ToString(); 
       addEvent.Actions = TextBoxEnergeies.Text; 
       addEvent.AssignmentTo = ListBoxUsers.SelectedValue.ToString(); 
       addEvent.EventState = (TextBoxEnergeies.Text != "") ? true : false; 
       client.write(addEvent); 
      } 

      client.Close(); 

      ListBoxEgk.ClearSelection(); 
      ListBoxEidosSum.ClearSelection(); 
      ListBoxEpik.ClearSelection(); 
      name.Text = ""; 
      TextBoxEnergeies.Text = ""; 
      TextBoxSumvan.Text = ""; 
      TextBoxDate.Text = ""; 
      ListBoxUsers.ClearSelection(); 
      searchBtn_Click(sender, e); 

      //ScriptManager.RegisterStartupScript(Page, Page.GetType(), "myModal", "$('#myModal').modal();", true); 
      //upModal.Update(); 

     } 
    } 

код также огромный беспорядок, если кто-то может предложить более эффективные способы работы с монстром я сделал, пожалуйста, дайте мне знать.

+0

«но когда я нажимаю save, который внутри моего модального, есть проблемы». * Какие проблемы? * – mason

+0

Я нажимаю save, модальный исчезает, но экран все еще темный. Не имеет значения, добавляю ли я событие или редактирую существующее. И событие будет сохранено/обновлено, но мне нужно перезагрузить страницу, чтобы увидеть его. – Ctrlfreak

+0

Действительно ли он достигает метода сохранения на стороне сервера? – mason

ответ

0

Ваша кнопка сохранения не имеет ничего, что могло бы отклонить модальный. И я подозреваю, что атрибут вашей отмены кнопки data-dismiss может быть связан с механизмом обратной передачи.

Попробуйте это:

<asp:Button ID="cancelBtn" CssClass="btn btn-default" runat="server" Text="Ακύρωση" OnClientClick="dismissModal();" OnClick="cancelBtn_Click" /> 

<asp:Button ID="saveBtn" runat="server" Text="Αποθήκευση" CssClass="btn btn-primary" OnClick="Btn_save_Click" OnClientClick="dismissModal();" /> 

function dismissModal() { 
    $('#myModal').modal('hide'); 
} 

Метод стороны OnClientClick клиента будет работать, то будет происходить обратную передача и ваши OnClick стороны сервера функция будет работать.

+0

Это работает! ... Но мой 'searchBtn_Click (sender, e);', хотя он называется, не обновляет мою сетку. Он работал. – Ctrlfreak

+0

@George Вы не предоставили код для 'searchBtn_Click', так что вам сложно это сделать. В любом случае, если бы я был вами, я бы отказался от этой программы UpdatePanel и postback mess и вместо этого использовал обычный AJAX (возможно, с помощью вспомогательной библиотеки, такой как jQuery), чтобы связаться с API на сервере. Этот API может быть просто подвержен действительным методам общих обработчиков (.ashx) или [ASP.NET Web API] (http://www.asp.net/web-api). Вы получите более чистый интерфейс и не должны постоянно бороться с проблемами UpdatePanel, и вы узнаете ценный метод, который применим не только к веб-формам. – mason

+0

Вы правы. Я взгляну на AJAX. – Ctrlfreak

Смежные вопросы