不同数据的ASP.Net绑定问题

本文关键字:Net 绑定 问题 ASP 数据 | 更新日期: 2023-09-27 18:24:55

我有一个表单已经工作了很长时间,今天我的UAT数据库只是失败了。

视图:

<%@ Control /* ... */ %>
<asp:Panel runat="server">
   <!-- Area not visible, list disabled -->
   <asp:PlaceHolder runat="server" Visible='False'>
      <asp:RadioButtonList runat='server' id='lstTradingSameAsRegistered'
           AutoPostBack="True" Enabled="False" />
   </asp:PlaceHolder>
   <asp:PlaceHolder runat="server" Visible='<%#!GetCurrentValue(IsTradingAddressSameAsRegistered , lstTradingSameAsRegistered)%>'>
      <!-- ... -->
   </asp:PlaceHolder>
   <-- Area visible, list enabled -->
   <asp:PlaceHolder runat="server" Visible='True'>
      <asp:RadioButtonList runat='server' id='lstHeadOfficeSameAsRegisteredLabel'
           AutoPostBack="True" Enabled="True" />
   </asp:PlaceHolder>
   <asp:PlaceHolder runat="server" Visible='<%#!GetCurrentValue(IsHeadOfficeAddressSameAsRegistered , lstHeadOfficeSameAsRegistered)%>'>
      <!-- ... -->
   </asp:PlaceHolder>
</asp:Panel>

代码隐藏:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    lstTradingSameAsRegistered.Items.Clear();
    lstTradingSameAsRegistered.Items.Add("Yes", "True");
    lstTradingSameAsRegistered.Items.Add("No", "False");
    lstHeadOfficeSameAsRegistered.Items.Clear();
    lstHeadOfficeSameAsRegistered.Items.Add("Yes", "True");
    lstHeadOfficeSameAsRegistered.Items.Add("No", "False");
    if (!IsPostBack)
    {
        lstTradingSameAsRegistered.SelectedIndex = IsTradingAddressSameAsRegistered ? 0 : 1;
        lstHeadOfficeSameAsRegistered.SelectedIndex = IsHeadOfficeAddressSameAsRegistered ? 0 : 1;
    }
}
public bool? GetCurrentValue(bool modelValue, ListControl control)
{
    if (IsPostBack)
    {
        var result = Request.Form[control.UniqueID].TryParseAs<bool>();
        if (result.HasValue)
            return result;
        if (control.SelectedValue == "True")
            return true;
        if (control.SelectedValue == "False")
            return false;
        return null;
    }
    else return modelValue;
}

在Dev+Live数据库上,代码运行良好,但在UAT上,在PostBack上调用GetCurrentValue()后,我得到了NullReferenceException

当我在lstHeadOfficeSameAsRegisteredLabel中选择一个新项目时,会引发一个PostBack事件,并且在视图中,两个RadioButtonList中所选的项目是null

该项目的源代码是相同的,在测试过程中,我只更改了配置文件中的数据库路径。调试页面时,我没有遇到任何其他错误。

由于这只是绑定(我想),可能是什么问题以及如何解决?

不同数据的ASP.Net绑定问题

这个问题来自一个框架。我有一个自定义的DateTime' class in my application created to avoid to change the server date, and when this date is setted to the future that breaks the .Net binding in some parts of my application. I don't have the entire source code of the framework so I cannot investigate more, but setting my custom date the same value as DateTime`修复了这个问题。