0

我的任务是在没有太多培训或经验的情况下维护一个较旧的 webforms 应用程序。

我被要求在现有表中添加一个新字段并将其公开在网页中。这是执行此操作的代码,我以其他现有字段和代码为模型。

 <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,它将按预期保存更改。

但是,如果现有记录上的值为 null 并且我尝试添加一个整数,则会失败并显示错误消息:

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

如果存在已删除的现有有效值并出现相同错误,它也会失败。

此字段不是必需的,因此我必须在此处允许 Null。

在过去的两天里,我已经学到了足够多的知识来决定发生这种情况,因为该字段是一个整数,并且 Null 无法转换为字符串以进行验证(至少这是我现在假设的)。

如果这是真的,这就是问题所在,我需要找到解决方法。

我在正确的轨道上吗?

除了适当范围内的整数之外,有没有办法提供一个验证,该验证也将接受该字段中的空值?

提前致谢。

4

2 回答 2

0

我终于弄清楚了我的错误。

它根本不在这个部分。

我没有意识到表单的 LingDataSource 的定义也必须更新。

一旦我添加了这一行:

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

它恢复了生机。

感谢所有的支持。

于 2018-10-08T23:02:21.790 回答
0

这不会引发您的错误

<%@ 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;
    }
}
于 2018-10-01T20:42:19.297 回答