无法从gridview中的文本框中获取修改后的值

时间:2013-07-24 10:16:57

标签: c# jquery asp.net gridview

我正在尝试使用gridview获取jquery数据。我修改了textbox上的现有数据,并尝试使用jquery获取该值。但它在textbox中给出了旧的价值。未修改textbox中的值。

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;
    }
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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{}))保持原样,并包含此内容。