0

我有多个下拉列表。我正在尝试将下拉列表输入值添加在一起,并将答案显示在文本框中。我将值转换为算术运算的整数,然后再转换回字符串以在文本框中显示答案。

它在 Visual Studio 中和在浏览器中加载时构建没有错误。但是,当您选择一个下拉列表时,会出现错误:“输入字符串的格式不正确。” 对于我的一生,我找不到代码错误:

displayRed 是我希望答案显示在 Red1DD、Red2DD 等中的文本框是下拉列表。

displayRed.Text =
  (Convert.ToInt32(Red1DD.SelectedValue.ToString())
 + Convert.ToInt32(Red2DD.SelectedValue.ToString())
 + Convert.ToInt32(Red4DD.SelectedValue.ToString())
 + Convert.ToInt32(Red8DD.SelectedValue.ToString())
 + Convert.ToInt32(Red16DD.SelectedValue.ToString())
 + Convert.ToInt32(Red32DD.SelectedValue.ToString())
 + Convert.ToInt32(Red64DD.SelectedValue.ToString())
 + Convert.ToInt32(Red128DD.SelectedValue.ToString())).ToString();

这是下拉列表之一的样子:

<asp:DropDownList ID="Red1DD" runat="server" AutoPostBack="True" OnSelectedIndexChanged="red_SelectedIndexChanged">
        <asp:ListItem Selected="True" Value="" Text="--" />
        <asp:ListItem value="0" Text="0" />
        <asp:ListItem value="1" Text="1" />
</asp:DropDownList>
4

2 回答 2

0

你应该使用Red1DD.SelectedItem.Text;而不是SelectedValue.ToString()

displayRed.Text =
  (Convert.ToInt32(Red1DD.SelectedItem.Text)
 + Convert.ToInt32(Red2DD.SelectedItem.Text)
 + Convert.ToInt32(Red4DD.SelectedItem.Text)
 + Convert.ToInt32(Red8DD.SelectedItem.Text)
 + Convert.ToInt32(Red16DD.SelectedItem.Text)
 + Convert.ToInt32(Red32DD.SelectedItem.Text)
 + Convert.ToInt32(Red64DD.SelectedItem.Text)
 + Convert.ToInt32(Red128DD.SelectedItem.Text)).ToString();
于 2013-02-13T21:40:51.180 回答
0

也许问题是,您为每个下拉菜单定义了一个空字符串的默认值。 <asp:ListItem Selected="True" Value="" Text="--" />

现在,当您将其中一个下拉列表的选择更改为 0 或 1 时,其他下拉列表的值仍然是空字符串。 Convert.ToInt32(..)不喜欢空字符串作为参数抛出异常。

因此,将您的默认值更改为 0/1,否则您必须在“转换逻辑”中处理空字符串。例如Convert.ToInt32(string.IsNullOrEmpty(Red1DD.SelectedValue.ToString()) ? "0" : Red1DD.SelectedValue.ToString()); 等等。

(您可以创建一个方法,该方法检查字符串是否为空并返回解析的值,如果为空则返回零。)

于 2019-04-08T22:20:28.313 回答