2014-01-31 3 views
0

У нас есть простой вид сетки asp.net, который показывает некоторые данные и ImageButton для редактирования данных.Установите поля текстового поля со значениями внутри диалогового окна jquery

После нажатия кнопки ImageButton мы вызываем событие RowCommand (событие на стороне сервера), чтобы разрешить редактирование данных. К сожалению, редактирование данных происходит в виде назначения значений элементам управления текстовыми полями, которые находятся внутри диалогового окна jquery.

Теперь некоторый код, чтобы помочь вам понять:

В сетке просмотра события rowcommand:

protected void gvActions_RowCommand(object sender, GridViewCommandEventArgs e) 
     { 
      var db = new DataClasses1DataContext(); 
      GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer; 
      switch (e.CommandName) 
      { 
       case "Edit": 
        //wants to edit an action item 
        hdnOpenDialogActions.Value = "1"; 

        ////set the fields to what is inside the grid 
        Label id = (Label)row.FindControl("lblIssueActionID"); 
        var rec = db.IssueActions.Single(x => x.IssueActionID == Convert.ToInt32(id.Text)); 

        if (rec == null) 
         return; 

        //assign textboxes that are located inside of a jquery grid. 
        lblIssueActionID.Text = id.Text;         //assign ID of action item 
        lblDialogOpenDateValue.Text = rec.OpenDate.ToShortDateString(); 
        txtDialogTargetDateValue.Text = rec.TargetDate.ToShortDateString(); 
        txtDialogClosedDateValue.Text = rec.ClosedDate.ToString(); 

        hdnActionText.Value = rec.IssueAction1; 
        txtActionHTML.Value = rec.IssueActionHTML; 
        hdnActionResolutionText.Value = rec.IssueActionResolution; 
        txtActionResolutionHTML.Value = rec.IssueActionResolutionHTML; 

        hdnResponsibleValue.Value = rec.ResponsibleID.ToString(); 
        lblResponsibleValue.Text = rec.ResponsibleContact.FullName;   
        break; 
      } 
     } 

hdnOpenDialogActions используется для обеспечения диалога открыт. Вот некоторые из JQuery, как вы видите, первоначально я скрыть:

$("#dialogActions").hide(); 
      $("#dialogActions").dialog({ 
       autoOpen: false, 
       appendTo: "form:first", 
       width: 'auto', 
       height: 'auto', 
       modal: true, 
       open: function (event, ui) { 
        $('#dialogActions').css('overflow', 'hidden'); //this line does the actual hiding 
       }, 
       close: function (event, ui) { 
        //if someone x's out (Closes the dialog) we better make sure we 
        //set the hidden field to 0 so that the dialog doesn't open up again on post back 
        $("#MainContent_hdnOpenDialogActions").val("0"); 
       } 
      }); 

Вот функция, которая держит его открытым (когда я установить скрытое поле к 1 это означает открыть диалоговое окно):

if ($("#MainContent_hdnOpenDialogActions").val() === "1") { 
       $("#dialogActions").dialog("open"); 
       $("#MainContent_txtActionHTML").focus(); 
      } else { 
       $("#dialogActions").hide(); 
      } 

Вот фактическая JQuery сетка (извините за использование таблицы :)):

  <asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Always" ChildrenAsTriggers="True"> 
      <ContentTemplate>  
     <div id="dialogActions" title="Issue Owner"> 
       <table> 
        <tr> 
         <td class="labelField"><asp:Label ID="lblDBA" runat="server" Text="Open"></asp:Label></td> 
         <td class="valueField"> 
          <asp:Label ID="lblDialogOpenDateValue" runat="server"></asp:Label> 
          <asp:Label ID="lblIssueActionID" runat="server" Visible="False"></asp:Label> 
          <asp:HiddenField ID="HiddenField1" runat="server" /> 
         </td> 
         <td class="labelField"> 
          <asp:Label ID="lblDRegion0" runat="server" Text="Responsible:"></asp:Label> 
         </td> 
         <td class="valueField"> 
          <asp:Label ID="lblResponsibleValue" runat="server" ToolTip="Responsible"></asp:Label> 
&nbsp;<asp:HyperLink ID="hlOpenResponsible" runat="server" NavigateUrl="#" Text="&lt;img src=&quot;../../Images/edit.png&quot; alt=&quot;Click to edit.&quot;/&gt;" ToolTip="Click to change user reports to..."></asp:HyperLink>&nbsp;|&nbsp;<asp:HyperLink ID="hlClearResponsible" runat="server" NavigateUrl="#" Text="&lt;img src=&quot;../../Images/delete.png&quot; alt=&quot;Click to clear selection.&quot;/&gt;" ToolTip="Click to clear selection."></asp:HyperLink> 
          <asp:HiddenField ID="hdnResponsibleValue" runat="server" /> 
          <asp:HiddenField ID="hdnOpenResponsible" runat="server" Value="0" /> 
         </td> 
        </tr> 
        <tr> 
         <td class="labelField"> 
          <asp:Label ID="lblDRegion" runat="server" Text="Target:"></asp:Label> 
         </td> 
         <td class="valueField"> 
          <asp:TextBox ID="txtDialogTargetDateValue" runat="server" CssClass="datePicker"></asp:TextBox> 
         </td> 
         <td class="labelField"><asp:Label ID="lblDPMIssue" runat="server" Text="Closed:"></asp:Label></td> 
         <td class="valueField"> 
          <asp:TextBox ID="txtDialogClosedDateValue" runat="server" CssClass="datePicker"></asp:TextBox> 
         </td> 
        </tr> 
        <tr> 
         <td class="labelField"> 
          <asp:Label ID="lblDPMIssue0" runat="server" Text="Action:"></asp:Label> 
         </td> 
         <td class="valueField" colspan="3"> 
          <textarea id="txtActionHTML" runat="server" class="tinyeditor" cols="5" rows="5" title="Enter the action item."></textarea><asp:HiddenField ID="hdnActionText" runat="server" /> 
          <asp:HiddenField ID="hdnActionHTML" runat="server" /> 
         </td> 
        </tr> 
        <tr> 
         <td class="labelField"> 
          <asp:Label ID="lblDPMIssue1" runat="server" Text="Resolution:"></asp:Label> 
         </td> 
         <td class="valueField" colspan="3"> 
          <textarea id="txtActionResolutionHTML" runat="server" class="tinyeditor" cols="5" rows="5" title="Enter the action item resolution."></textarea><asp:HiddenField ID="hdnActionResolutionText" runat="server" /> 
          <asp:HiddenField ID="hdnActionResolutionHTML" runat="server" /> 
         </td> 
        </tr> 
        <tr> 
         <td class="labelField" colspan="4"> 
          <asp:Button ID="btnSaveAction" runat="server" Text="Submit" OnClientClick="SubmitContent();" ToolTip="Submit/Save changes?" OnClick="btnSaveAction_Click" /> 
         </td> 
        </tr> 
       </table> 
     </div> 
       </ContentTemplate> 
      </asp:UpdatePanel> 

я поставил точку останова, и я могу видеть, установив код в текстовых полях, но как только диалог открывает все на самом деле не обновляется , Текстовые поля пусты и т. Д., Хотя код позади показывает, что они получают значения.

Мои навыки переднего конца довольно плохие, поэтому, если кто-то может сообщить мне, почему это происходит (может быть, это связано с тем, что это управление на стороне сервера, и это вызывает сообщение после события команды row)?

+0

У вас есть это завернутое в UpdatePanel случайно? – macoms01

+0

Ну, я думаю, вопрос в том, должен ли я обернуть его в панель обновления или оставить его вне пакета обновления. Кажется, я попробовал обернуть его в панель обновления, но, возможно, я сделал эту часть неправильно. – JonH

+0

Причина, по которой я спрашивал, состоит в том, что кажется, что панель обновления (если вы ее используете) не обновляется, когда сервер отправляет данные клиенту. Если вы можете отлаживать код позади и видеть, что значения устанавливаются, но веб-страница не отображает их, я думаю, что вы должны делать что-то асинхронно ... Есть ли в настоящее время панель обновления, обернутая вокруг этого html? – macoms01

ответ

1

Ответ представляет собой комбинацию двух других ответов и некоторой клиентской помощи.Как macoms код показывает ключевой элемент для изменения на вашей странице ASPX, UpdateMode = условного

<asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional"> 

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

ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(edit_control); 

И это будет должны быть связаны в событии OnItemDataBound, которое вы можете найти более подробную информацию о here, если вам это нужно.

И наконец, вам нужно будет обновить панель обновления После завершения вашей команды редактирования, как GBS указывает с помощью обновления команды()

lblResponsibleValue.Text = rec.ResponsibleContact.FullName; 
    UpdatePanel1.Update(); 
    break; 
} 

В WebForms стороне клиента парне положить панели обновления внутри ваш объект jQuery, а не наоборот. Вы встретите меньше горя. Похоже, это тоже может быть проблемой. Пакет обновления остается включенным, но ваш jQuery append перемещает диалог и НЕ панель обновления. Переместите панель обновления внутри div.

<div id="dialogActions" title="Issue Owner"> 
    <asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional"> 
     <ContentTemplate>  
      <table> 

Это должно вас исправить.

0

Хорошо, я думаю, что вижу проблему. Вам нужно использовать секцию триггеров, чтобы сообщить этой панели обновлений, какой щелчок кнопки заставляет ее обновлять.

Что-то вроде:

<asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional" ChildrenAsTriggers="True"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="gvActions" /> 
    </Triggers> 
    <ContentTemplate> 
     <div id="dialogActions" title="Issue Owner"> 
      <table> 
       <!-- text boxes you want to be updated --> 
      </table> 
     </div> 
    </ContentTemplate> 
</asp:UpdatePanel> 

<asp:GridView runat="server" ID="gvActions"></asp:GridView> 

Я не уверен, что триггер будет gvActions, так что вы, возможно, придется играть с ним. Сообщите мне, если это поможет, или если у вас все еще есть проблемы. Я буду вдали от своего компьютера до позднего вечера/завтра fyi.

+0

Это не работает как карандаш (значок редактирования) - это кнопка изображения внутри gridview (она может отображаться в зависимости от количества строк). – JonH

+0

Я понимаю, что вы имеете в виду, но я бы попробовал, так как он вызовет событие rowCommand gridview независимо. Я еще раз посмотрю, когда я получу шанс в этот уик-энд. – macoms01

+0

Это не имеет смысла, поскольку gvActions - это gridview. – JonH

0

Если ваш GV находится за пределами UpdatePanel, вам придется вручную обновить обновленную панель при обратной передаче.

Так прямо внутри вашего редактирования переключатель случае, до перерыва добавить следующую строку:

.... 
UpdatePanel1.Update(); 
break; 
.... 

Что она делает программно обновляет UpdatePanel.

+0

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

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