Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有非唯一值的DropDownList正在破坏viewstate/回发_C#_Asp.net - Fatal编程技术网

C# 具有非唯一值的DropDownList正在破坏viewstate/回发

C# 具有非唯一值的DropDownList正在破坏viewstate/回发,c#,asp.net,C#,Asp.net,好的,我有一个DropDownList控件,它包含50个列表项,50个州各一个。文本值反映使每个文本值唯一的每个状态名称。但是,每个列表项的value属性都包含该州的当前税率,这意味着某些值不是唯一的。此控件上的回发会不断更改所选项目。这有什么办法吗 若要复制,请将下面的代码复制到新的web表单中。这只是一个简单的下拉列表。尝试选择不同的状态。它们中的一些会粘住,而另一些则不会。例如,尝试选择“爱达荷州”作为州;出于某种原因,它又回到了阿肯色州。这是在OnSelectedIndexChanged

好的,我有一个DropDownList控件,它包含50个列表项,50个州各一个。文本值反映使每个文本值唯一的每个状态名称。但是,每个列表项的value属性都包含该州的当前税率,这意味着某些值不是唯一的。此控件上的回发会不断更改所选项目。这有什么办法吗

若要复制,请将下面的代码复制到新的web表单中。这只是一个简单的下拉列表。尝试选择不同的状态。它们中的一些会粘住,而另一些则不会。例如,尝试选择“爱达荷州”作为州;出于某种原因,它又回到了阿肯色州。这是在OnSelectedIndexChanged事件触发之前发生的,因为如果我选择“Idaho”,然后在回发时在event方法中读取所选项目,则所选项目是阿肯色州!很烦人

            State:<br />
            <asp:DropDownList BorderWidth="3px" AutoPostBack="true" BackColor="#ffffcc" ID="ddlBillingState"
                runat="server">
                <asp:ListItem Value="0" Text="Not Specified"></asp:ListItem>
                <asp:ListItem Value="4" Text="Alabama"></asp:ListItem>
                <asp:ListItem Value="0" Text="Alaska"></asp:ListItem>
                <asp:ListItem Value="5.6" Text="Arizona"></asp:ListItem>
                <asp:ListItem Value="6" Text="Arkansas"></asp:ListItem>
                <asp:ListItem Value="8.25" Text="California"></asp:ListItem>
                <asp:ListItem Value="2.9" Text="Colorado"></asp:ListItem>
                <asp:ListItem Value="6" Text="Connecticut"></asp:ListItem>
                <asp:ListItem Value="6" Text="District of Columbia"></asp:ListItem>
                <asp:ListItem Value="0" Text="Delaware"></asp:ListItem>
                <asp:ListItem Value="6" Text="Florida"></asp:ListItem>
                <asp:ListItem Value="4" Text="Georgia"></asp:ListItem>
                <asp:ListItem Value="4" Text="Hawaii"></asp:ListItem>
                <asp:ListItem Value="6" Text="Idaho"></asp:ListItem>
                <asp:ListItem Value="6.25" Text="Illinois"></asp:ListItem>
                <asp:ListItem Value="7" Text="Indiana"></asp:ListItem>
                <asp:ListItem Value="6" Text="Iowa"></asp:ListItem>
                <asp:ListItem Value="5.3" Text="Kansas"></asp:ListItem>
                <asp:ListItem Value="6" Text="Kentucky"></asp:ListItem>
                <asp:ListItem Value="4" Text="Louisiana"></asp:ListItem>
                <asp:ListItem Value="5" Text="Maine"></asp:ListItem>
                <asp:ListItem Value="6" Text="Maryland"></asp:ListItem>
                <asp:ListItem Value="6.25" Text="Massachusetts"></asp:ListItem>
                <asp:ListItem Value="6" Text="Michigan"></asp:ListItem>
                <asp:ListItem Value="6.875" Text="Minnesota"></asp:ListItem>
                <asp:ListItem Value="7" Text="Mississippi"></asp:ListItem>
                <asp:ListItem Value="4.225" Text="Missouri"></asp:ListItem>
                <asp:ListItem Value="0" Text="Montana"></asp:ListItem>
                <asp:ListItem Value="5.5" Text="Nebraska"></asp:ListItem>
                <asp:ListItem Value="6.85" Text="Nevada"></asp:ListItem>
                <asp:ListItem Value="0" Text="New Hampshire"></asp:ListItem>
                <asp:ListItem Value="7" Text="New Jersey"></asp:ListItem>
                <asp:ListItem Value="5" Text="New Mexico"></asp:ListItem>
                <asp:ListItem Value="4" Text="New York"></asp:ListItem>
                <asp:ListItem Value="5.75" Text="North Carolina"></asp:ListItem>
                <asp:ListItem Value="5" Text="North Dakota"></asp:ListItem>
                <asp:ListItem Value="5.5" Text="Ohio"></asp:ListItem>
                <asp:ListItem Value="4.5" Text="Oklahoma"></asp:ListItem>
                <asp:ListItem Value="0" Text="Oregon"></asp:ListItem>
                <asp:ListItem Value="6" Text="Pennsylvania"></asp:ListItem>
                <asp:ListItem Value="7" Text="Rhode Island"></asp:ListItem>
                <asp:ListItem Value="6" Text="South Carolina"></asp:ListItem>
                <asp:ListItem Value="4" Text="South Dakota"></asp:ListItem>
                <asp:ListItem Value="7" Text="Tennessee"></asp:ListItem>
                <asp:ListItem Value="6.25" Text="Texas"></asp:ListItem>
                <asp:ListItem Value="4.7" Text="Utah"></asp:ListItem>
                <asp:ListItem Value="6" Text="Vermont"></asp:ListItem>
                <asp:ListItem Value="5.0" Text="Virginia"></asp:ListItem>
                <asp:ListItem Value="6.5" Text="Washington"></asp:ListItem>
                <asp:ListItem Value="6" Text="West Virginia"></asp:ListItem>
                <asp:ListItem Value="5" Text="Wisconsin"></asp:ListItem>
                <asp:ListItem Value="4" Text="Wyoming"></asp:ListItem>
            </asp:DropDownList>
状态:

我甚至尝试禁用viewstate,然后在selectedIndex更改时,我会将所选索引存储在viewstate[“selectedIndex”]中,并在回发时检索它并重新填充下拉列表。但正如我之前所说的,因为所选项目的值与它到达事件之前的预期值不同,所以它只是将扭曲的值存储在我的自定义viewstate字段中。

为什么不能从州缩写或其他内容获取税率

在代码隐藏中:

decimal taxRate = GetTaxRateFromState(ddlState.SelectedValue);
我想下拉列表不知道哪个值是最初选择的值,它只是将所选值设置为具有发布值的第一个项目。

Hi Chevex
不幸的是,没有办法为ListItem使用非唯一值。您必须为每个税率生成一个唯一的id,并将id用作值而不是税率

我认为您的值应该是唯一的。与其将税率作为值,不如让值只是状态,然后使用该状态获取您的纳税值。例如,在代码隐藏中,可以使用
字典taxTable
获取值。比如

decimal taxRate = taxTable[yourDropDown.SelectedValue];

将“值”视为ASP.NET用于标识从下拉列表中选择的项目的主键。通过重新调整value属性的用途以存储其他内容,所选项目(通过其值存储在ViewState中)不再是唯一的,并且无法持久化。正如其他人提到的,将您的税率存储到其他地方,并使用所选状态确定税率(在DropDownList控件本身之外)。

谢谢,这正是我所担心的。当它归结为一些根本不可能的事情时,就糟透了。我花了几个小时试图找到viewstate被修改的地方,结果却发现它与viewstate无关。lolI实际上正在做更多的工作,并建立一个税务数据库表。首先,我应该这样做,以便在税率发生变化时进行修改。这就是当你抄近路时会发生的事情:PMakes sense。非常感谢。您可能会认为ListItem会有一个名为ID的字段,或者出于这个目的,但是哦,好吧。实际上,我有两个下拉列表,所以无论如何,将税务信息存储在数据库表中更有意义。这样,两个下拉列表都可以访问一个来源,并且将来可以使用税务更新工具修改数据。这会教你更多的偷工减料P