Javascript 如何将webdatagrid的更改提交到会话?

Javascript 如何将webdatagrid的更改提交到会话?,javascript,asp.net,webdatagrid,Javascript,Asp.net,Webdatagrid,我试图将网格的数据源设置为会话变量并绑定它,这是可行的。然后我想向datagrid添加一行,并将插入的行持久化回会话。使用下面的代码,在编辑.commit之后,我得到一个AJAX同步失败的空引用异常错误 我认为这与var newMarket数组没有正确数量的字段有关,所以我尝试用 var newMarket = [1,"q", "q", "q", true, "03/12/2015", "62F387C7-CC7D-4491-9C71-10EC254F6EB9", "03/12/2015",

我试图将网格的数据源设置为会话变量并绑定它,这是可行的。然后我想向datagrid添加一行,并将插入的行持久化回会话。使用下面的代码,在编辑.commit之后,我得到一个AJAX同步失败的空引用异常错误

我认为这与var newMarket数组没有正确数量的字段有关,所以我尝试用

var newMarket = [1,"q", "q", "q", true, "03/12/2015", 
"62F387C7-CC7D-4491-9C71-10EC254F6EB9", "03/12/2015", 
"62F387C7-CC7D-4491-9C71-10EC254F6EB9"]
但我也犯了同样的错误

请注意:1是一个标识字段,我想我需要填充它,最后一个q之后的字段在存储过程中设置。而且,我正在用javascript硬编码这些值,以提高测试速度

下面是我的代码

<ig:WebDataGrid ID="marketListGrid" runat="server" AutoGenerateColumns="False" DataKeyFields="ID" Height="500px">
<Columns>
    <ig:BoundDataField Key="MarketName" DataFieldName="MarketName" Width="135px" Header-Text="Market Name">
    </ig:BoundDataField>
    <ig:BoundDataField Key="MarketShorthand" DataFieldName="MarketShorthand" Width="132px" Header-Text="Market Shorthand">
    </ig:BoundDataField>
</Columns>
<Behaviors>
    <ig:Sorting>
    </ig:Sorting>
    <ig:ColumnResizing>
    </ig:ColumnResizing>
    <ig:Selection CellClickAction="Row" RowSelectType="Single">
        <SelectionClientEvents RowSelectionChanged="" />
    </ig:Selection>
    <ig:EditingCore Enabled="True" BatchUpdating="True"></ig:EditingCore>
</Behaviors>

无法将基础设施网格绑定到基于会话的列表。您可以在updateButton单击时进行回发,将一个新项目插入到基于会话的集合中,然后重新绑定。除非您希望更新/删除记录,否则只需禁用EditingCore即可。如果需要更新/删除记录,请为行更新和行删除事件添加服务器端处理程序,并再次编写自己的代码来更新/删除集合中的记录,然后从那里重新绑定。如果需要ajax功能,请使用UpdatePanels

<div>
    <input id="insertMarketButton" type="button" value="Insert Market"       onclick="insertMarketButton_Clicked();" />
</div>

<ig:WebDialogWindow ID="insertMarketDialog" runat="server" Width="650px" Height="400px" InitialLocation="Centered" Modal="True" WindowState="Hidden">
<Header CaptionText="Create New Market"></Header>
<ContentPane>
    <Template>
        <div>
            <div class="labelText">
                <asp:Label ID="marketNameDialogLabel" runat="server" CssClass="fieldGrpLabel" Text="Market Name"
                    AssociatedControlID="marketNameDialogTextBox"></asp:Label>
                <div class="valueControl">
                    <asp:TextBox ID="marketNameDialogTextBox" runat="server" CssClass="name_TextBox"
                        MaxLength="64"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="marketNameDialogTextBoxRequired" runat="server" ControlToValidate="marketNameDialogTextBox"
                        ErrorMessage="Market name is required." Text="*" ToolTip="Market name is required." ValidationGroup="insertMarketValidationGroup">
                    </asp:RequiredFieldValidator>
                </div>
                <div class="labelText">
                    <asp:Label ID="marketDescriptionDialogLabel" runat="server" CssClass="descriptionLabel" Text="Market Description"
                        AssociatedControlID="marketDescriptionDialogTextBox"></asp:Label>
                </div>
                <div class="valueControl">
                    <asp:TextBox ID="marketDescriptionDialogTextBox" runat="server" CssClass="description_TextBox"
                        TextMode="MultiLine" MaxLength="512"></asp:TextBox>
                </div>
                <div class="labelText">
                    <asp:Label ID="marketShorthandDialogLabel" runat="server" CssClass="fieldGrpLabel" Text="Market Shorthand"
                        AssociatedControlID="marketShorthandDialogTextBox"></asp:Label>
                </div>
                <div class="valueControl">
                    <asp:TextBox ID="marketShorthandDialogTextBox" runat="server" CssClass="shorthand_TextBox"
                        MaxLength="16"></asp:TextBox>
                </div>
                <div class="updateButton">
                    <input type="button" value="Insert Market" onclick="return add();" />
                    <asp:Button ID="cancelMarketDialogButton" runat="server" Text="Cancel" CssClass="buttonHeight" UseSubmitBehavior="false" />
                </div>
            </div>
        </div>
    </Template>
</ContentPane>
input id="currentUserID" runat="server" type="hidden" value="" />
<input id="selectedMarketID" runat="server" type="hidden" value="0" />
<input id="selectedRegionID" runat="server" type="hidden" value="0" />
<input id="selectedStateID" runat="server" type="hidden" value="0" />
<input id="selectedAreaID" runat="server" type="hidden" value="0" />
<input id="market" runat="server" type="hidden" />

<script type="text/javascript" language="javascript">
var marketData;
var marketDlg;
var selectedMarketID;
var marketName = $get('<%= marketNameDialogTextBox.ClientID %>');
var marketDescription = $get('<%= marketDescriptionDialogTextBox.ClientID %>');
var marketShorthand = $get('<%= marketShorthandDialogTextBox.ClientID %>');

$(function () {
    marketDlg = $find('<%= insertMarketDialog.ClientID %>');
    selectedMarketID = $get('<%= selectedMarketID.ClientID %>').value;
});

function marketListGrid_SelectionChanged(sender, eventArgs) {
    var rows = eventArgs.getSelectedRows();
    var selectedRow = rows.getItem(0);
    document.getElementById('<%= selectedMarketID.ClientID %>').value = selectedRow.get_dataKey();
}

function insertMarketButton_Clicked() {
    if (marketDlg != null) {
        marketDlg.set_windowState($IG.DialogWindowState.Normal);
    }
}

function del() {
    if (selectedMarketID != "") {
        var grid = $find("<%= marketListGrid.ClientID %>");
        var rows = grid.get_rows();
        var row = rows.get_rowFromKey(selectedMarketID);
        rows.remove(row, false);
    } else {
        alert("");
    }
}

function add() {
    var grid = $find("<%= marketListGrid.ClientID %>");
    var rows = grid.get_rows();
    var newMarket = ["q", "q", "q"];
    rows.add(newMarket);

    marketDlg.set_windowState($IG.DialogWindowState.Hidden);

    committing(grid);

    return true;
}

function committing(grid) {
    var editing = grid.get_behaviors().get_editingCore();
    editing.commit();
}
private List<Market> MarketList
{
    get { return (List<Market>) Session["MarketList"]; }
    set { Session["MarketList"] = value; }
}

protected void Page_Load(object sender, EventArgs e)
{
        BindMarkets();
}

private void BindMarkets()
{
    while (true)
    {
        if (MarketList != null)
        {
            marketListGrid.DataSource = MarketList;
            marketListGrid.DataBind();
        }
        else
        {
            MarketList = GetAllMarkets();
            continue;
        }
        break;
    }
}