2008年11月13日 星期四

ListView Insert 不能用 runat="server"

有沒有遇過神奇的事件??
最近遇到一個

就是 ListView 在 Insert Template 時會出現 神奇 Exception

ObjectDataSource“ObjectDataSource1”没有可以插入的值。请检查“values”字典是否包含值。

原始碼如下



<asp:ListView runat="server" ID="groupedList" DataSourceID="odbDetailCLD_SERIALDEF"
    EnableViewState="true" DataKeyNames="SERIALID" OnSelectedIndexChanging="groupedList_SelectedIndexChanging"
    InsertItemPosition="FirstItem" OnItemInserting="groupedList_ItemInserting">
    <LayoutTemplate>
        <table runat="server" id="table1">
            <tr runat="server" id="itemPlaceholder">
            </tr>
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr id="trItem" runat="server">
            <td>
                <%-- Data-bound content. --%>
                <asp:LinkButton ID="btnItemEdit" CommandName="Edit" runat="server">
                    <img id="imgItemEdit" runat="server" alt='<%#Eval("SerialName") %>' src='~/Image/edit.bmp' />
                </asp:LinkButton>
                <asp:LinkButton ID="NameLabel" runat="server" CommandName='Select' CommandArgument='<%#Eval("SerialID") %>'
                    Text='<%#Eval("SerialName") %>' />
            </td>
        </tr>
    </ItemTemplate>
    <EditItemTemplate>
        <tr id="tdEdit" runat="server">
            <td>
                <input id="Hidden1" type="hidden" runat="server" value='<%#Bind("SERIALID") %>' />
                <asp:LinkButton ID="LinkButton2" CommandName="Update" runat="server">
                    <img id="Img2" runat="server" alt='<%#Eval("SerialName") %>' src='~/Image/save.gif' />
                </asp:LinkButton>
                <asp:LinkButton ID="LinkButton1" CommandName="Cancel" runat="server">
                    <img id="imgEditEdit" runat="server" alt='<%#Eval("SerialName") %>' src='~/Image/cancel.gif' />
                </asp:LinkButton>
                系'a8t列'a6C課'bd?程'b5{名'a6W稱'ba?
                <asp:TextBox ID="txtEditSerialName" runat="server" Text='<%#Bind("SerialName") %>'></asp:TextBox>
            </td>
        </tr>
    </EditItemTemplate>
    <InsertItemTemplate>
        <tr id="tdInsert" runat="server">
            <td>
                <asp:LinkButton ID="btnSave" CommandName="Insert" runat="server">
                    <img id="imgInsertSave" runat="server" alt='<%#Eval("SerialName") %>' src='~/Image/save.gif' />
                </asp:LinkButton>
                <asp:LinkButton ID="btnCancel" CommandName="Cancel" runat="server">
                    <img id="imtInsertCancel" runat="server" alt='<%#Eval("SerialName") %>' src='~/Image/cancel.gif' />
                </asp:LinkButton>
                系'a8t列'a6C課'bd?程'b5{名'a6W稱'ba?
                <asp:TextBox ID="txtInsertSerialName" runat="server" Text='<%#Bind("SerialName") %>'></asp:TextBox>
            </td>
        </tr>
    </InsertItemTemplate>
</asp:ListView>




看出 Insert Template 那有問題了嗎??

對,我看了大約三個月吧,還是看不出來。
後來不死心將錯誤翻成英文,再請 google 大神幫忙找

"ObjectDataSource“ObjectDataSource1”没有可以插入的值。请检查“values”字典是否包含值。"
翻成
"asp.net listview there is no value to insert"

還真的給我找到了





I have found the problem.
The runat="server" on the InsertItemTemplate is causing the problem. Remove the runat="server" and
everything works fine.
Please shed some light on why this should cause a problem.
--
Philip





天殺的 runat="server"
為何 EditTemplate 可以
InsertTemplate 就不行呀~~

update 2008/11/17
神奇的事發生了。今天連 EditTemplate 也不行。
但 EditTemplate 中有兩個 Field
SerialID, SerialName
SerialID Bind 到一個 Hidden Field, SerialName Bind 到 TextBox。
為何 SerialName 就是給他變成 null >_<
把 的 runat="server" 拿掉後又好了 somebody tell me why ~~

沒有留言: