RangeValidator на странице WebForms завершается ошибкой - PullRequest
0 голосов
/ 27 сентября 2018

Мне было поручено поддерживать старое приложение веб-форм без особого обучения или опыта.

Меня попросили добавить новое поле в существующую таблицу и открыть его на веб-странице.Вот код для этого, который я смоделировал на других существующих полях и коде.

 <asp:TextBox ID="PortableBarrelCompressionValuetextBox" 
    runat="server" 
    SkinID="FVTextBox" 
    Text='<%# Bind("PortableBarrelCompressionValue") %>'  
    <asp:RangeValidator 
    ID="RangeValidatorPortableBarrelCompressionValuetextBox"
    runat="server" 
    ControlToValidate="PortableBarrelCompressionValuetextBox"
    CssClass="failureNotification" 
    Display="Dynamic"
    ErrorMessage="Whole Numbers Between 0 and 9999" 
    MaximumValue="9999"
    MinimumValue="0"
    Type="Integer" 
    Text='<%# Eval("PortableBarrelCompressionValue") %>'>
    </asp:RangeValidator>

Это работает правильно, только если существующее значение не равно нулю (и, конечно, в пределах диапазона).Если я изменю действительное число, скажем, 22, на другое действительное число, 200, оно сохранит изменение, как и ожидалось.

Однако, если значение в существующей записи было нулевым, и я пытаюсь добавить целое число,происходит сбой с сообщением об ошибке:

Value   {" is not a valid value for Int32."}    System.Exception

Также происходит сбой, если существует существующее допустимое значение, которое было удалено, с той же ошибкой.

Это поле не является обязательным, поэтому яЯ должен учесть Null здесь.

Я достаточно выучил за последние два дня, чтобы решить, что это происходит, потому что поле является целым числом и что Null не может быть преобразован в строку для проверки (по крайней мере, это то, что я предполагаю сейчас).

Если это правда, и в этом проблема, мне нужно найти способ ее решить.

Я на правильном пути?

Есть ли способ обеспечить проверку, которая также будет принимать пустые значения в этом поле, в дополнение к целым числам в соответствующем диапазоне?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Я наконец разобрался в своей ошибке.

Этого не было в этом разделе вообще.

Я не осознавал, что определение LingDataSource для формы также необходимо обновить.

Как только я добавил эту строку:

<asp:Parameter Name="PortableBarrelCompressionValue"
ConvertEmptyStringToNull="true" />

Это вернулось к жизни.

Спасибо за поддержку.

0 голосов
/ 01 октября 2018

Это не приводит к вашей ошибке

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="FredWebForm.WebForm1" %>

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="FeaturedContent" runat="server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">
    <%--bind only used with controls that have datasource eg grid--%>
    <asp:TextBox runat="server" Text='<%# GetStatus("PortableBarrelCompressionValue") %>' ID="MyTextBox" />
    <asp:RangeValidator
        ID="RangeValidatorPortableBarrelCompressionValuetextBox"
        runat="server"
        ControlToValidate="MyTextBox"
        CssClass="failureNotification"
        Display="Dynamic"
        ErrorMessage="Whole Numbers Between 0 and 9999"
        MaximumValue="9999"
        MinimumValue="0"
        Type="Integer"
        Text='Needs to be a number between 0 and 9999'>
    </asp:RangeValidator>
</asp:Content>

Код позади

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            DataBind();
        }
    }

    protected string GetStatus(string theID)
    {
        return null;
    }
}
...