DetailsView преобразует пустую строку TextBoxes в ноль - PullRequest
2 голосов
/ 26 октября 2011

У меня есть базовое приложение ASP.NET Web Forms.

Я даю пользователю возможность создавать записи с помощью Веб-формы и обновлять их с помощью DetailsView .

Веб-форма сохраняет пустое поле в Текстовые поля как * пустая строка * g в БД правильно.

DetailsView вместо этого сохраняет их как поля null в БД.

Более того, в событии DetailsView_ItemUpdated , если я проверю e.newvalues ​​ и e.oldvalues ​​ аргументы, соответствующие поля также равны нулю (исключение), что означает, что данные уже отправлены на сервер как ноль при отправке.

In DetailsView Я использую шаблоны и задаю все параметры обновления в SQLDataSource как ConvertEmptyStringToNull = "false" .

параметр SQLDataSource :

<asp:Parameter Name="SHELF" Type="String" ConvertEmptyStringToNull="false"/>

DetailsView

 <asp:DetailsView runat="server" 
                    ID="GvProductDetail" AutoGenerateRows="False" DataKeyNames="rowid" 
                    DataSourceID="ProductDetailData" 
                    OnItemUpdated="gvProductDetail_ItemUpdated">

 <asp:TemplateField>
    <HeaderTemplate>Stock Shelf &nbsp;</HeaderTemplate>
    <ItemTemplate>
       <%# Eval("Shelf") %>
    </ItemTemplate>
    <EditItemTemplate>
       <asp:TextBox runat="server" ID="txtShelf"  Text='<%# Bind("Shelf") %>' ></asp:TextBox>
    </EditItemTemplate>
</asp:TemplateField>

Возможно ли, что Bind преобразует пустые значения вноль?Я подумал, что этого было достаточно, чтобы установить правило UpdateParameters, чтобы не преобразовывать пустую строку в ноль, но иногда возникает другой сюрприз.кто-нибудь может помочь?

1 Ответ

1 голос
/ 27 октября 2011

Я решил это, поместив ConvertEmptyStringToNull = "false" в каждый <asp:TemplateField>, содержащий <asp:TextBox>:

<asp:TemplateField ConvertEmptyStringToNull="false"> 
   <HeaderTemplate>Stock Shelf &nbsp;</HeaderTemplate> 
   <ItemTemplate>&nbsp;<%# Eval("Shelf") %></ItemTemplate> 
   <EditItemTemplate> 
     <asp:TextBox runat="server" ID="txtShelf" Text='<%# Bind("Shelf") %>' >
     </asp:TextBox> 
   </EditItemTemplate> 
</asp:TemplateField>
...