2013-07-24 2 views
0

Я пытаюсь получить gridview данные, используя jquery. Я изменил существующие данные на textbox и попытаюсь получить это значение, используя jquery. но он дал старое значение в textbox. не измененное значение в textbox.Невозможно получить измененное значение из текстового поля в gridview

ASPX Код

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 

    /*javascripts and stylesheets are here*/ 

    <script type="text/javascript"> 

     function Navigate() { 
      $('#dialogDiv').dialog('open'); 
     } 

     $(document).ready(function() { 
      var list = ""; 
      $('#dialogDiv').dialog({ 
       autoOpen: false, 
       resizable: true, 
       width: 300, 
       height: 'auto', 
       buttons: { 
        "Save": function() { 
         $("#<%=Type_GV.ClientID %> tr").each(function() { 
          //Skip first(header) row 
          if (!this.rowIndex) return; 
          var type = $(this).find("td:last").html(); 
          list += type + "</br>"; 
         }); 
         alert(list) 
        } 
       } 
      }); 
     }); 

    </script> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"> 
    </asp:ScriptManager> 
    <div id="dialogDiv" title="Type" style="overflow: hidden"> 
     <div id="TypeDiv" class="divTable"> 
      <div class="divRow"> 
       <div class="divColumn"> 
        <div> 
         <asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional"> 
          <Triggers> 
           <asp:AsyncPostBackTrigger ControlID="open" EventName="Click" /> 
          </Triggers> 
          <ContentTemplate> 
           <asp:GridView ID="Type_GV" runat="server" ShowFooter="True" AutoGenerateColumns="False"> 
            <Columns> 
             <asp:TemplateField HeaderText="Type"> 
              <ItemTemplate> 
               <asp:TextBox ID="txtType" runat="server" Text='<%# Bind("Type") %>'></asp:TextBox> 
              </ItemTemplate> 
             </asp:TemplateField> 
            </Columns> 
           </asp:GridView> 
          </ContentTemplate> 
         </asp:UpdatePanel> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
    <asp:Button ID="open" runat="server" Text="Open dialog" OnClientClick="Navigate()" 
     OnClick="open_Clicked" /> 
    <br /> 
    <p> 
     <asp:Button ID="btnSaveType" runat="server" OnClick="btnSaveType_Clicked" Style="visibility: hidden; 
      display: none;" /> 
    </p> 
</asp:Content> 

код за

protected void Page_Load(object sender, EventArgs e) 
    { 


    } 

    protected void open_Clicked(object sender, EventArgs e) 
    { 
      VehicleType vTypeObject = new VehicleType(); 
      Type_GV.DataSource = vTypeObject.GetTypeList(); 
      Type_GV.DataBind(); 
    } 


    protected void btnSaveType_Clicked(object sender, EventArgs e) 
    { 
     foreach (GridViewRow gvr in Type_GV.Rows) 
     { 
      TextBox type = (TextBox)gvr.FindControl("txtType"); 
      Debug.WriteLine("type : " + type.Text);     
     } 
    } 


public class VehicleType 
{ 
    public string Type { get; set; } 

    public List<VehicleType> GetTypeList() 
    { 
     List<VehicleType> list = new List<VehicleType>() 
    { 
     new VehicleType{Type="Type1"}, 
     new VehicleType{Type="Type2"} 
    }; 
     return list; 
    } 
} 

Как я могу решить эту проблему?

+0

Вы получаете предупреждение при нажатии кнопки «Сохранить»? –

+0

@ DKM да. Я получаю предупреждение при щелчке по сохранению со старым значением в текстовом поле. а не новое/измененное значение. – Bishan

ответ

1

Вы можете использовать это:

Как вы используете обновление панель, this.remove_endRequest() возникает после того, как асинхронный постбэк закончен и контроль был возвращен в браузер.

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

See Documentation

Sys.WebForms.PageRequestManager.getInstance().remove_endRequest($(function(){ 
     var list = ""; 
     $('#dialogDiv').dialog({ 
      autoOpen: false, 
      resizable: true, 
      width: 300, 
      height: 'auto', 
      buttons: { 
       "Save": function() { 
        $("#<%=Type_GV.ClientID %> tr").each(function() { 
         //Skip first(header) row 
         if (!this.rowIndex) return; 
         var type = $(this).find("td:last").html(); 
         list += type + "</br>"; 
        }); 
        alert(list) 
       } 
      } 
     }); 
});) 

Примечание: Не удаляйте $(document).ready(function{})) держать его, как это, и включают в себя это.

+0

Я добавил вот так. 'Sys.WebForms.PageRequestManager.getInstance(). Remove_endRequest ($ (document) .ready (function() {/ * Code Here * /}));'. но консоль в 'chrome' сообщила об ошибке как' Uncaught ReferenceError: Sys не определен'. 'Sys' отсюда' Sys.WebForms.PageRequestManager' – Bishan

+0

@Bishan Установите 'EnablePartialRendering =" true "' в свой тег диспетчера скриптов. –

+0

все еще получает ту же ошибку после добавления как ' ' – Bishan

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