C# 具有不同数据的ASP.Net绑定问题
我有一个表格,已经工作了很长时间,今天只是我的UAT数据库失败 查看:C# 具有不同数据的ASP.Net绑定问题,c#,asp.net,binding,webforms,C#,Asp.net,Binding,Webforms,我有一个表格,已经工作了很长时间,今天只是我的UAT数据库失败 查看: <%@ Control /* ... */ %> <asp:Panel runat="server"> <!-- Area not visible, list disabled --> <asp:PlaceHolder runat="server" Visible='False'> <asp:RadioButtonList runat='serv
<%@ 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;
}
代码隐藏:
<%@ 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;
}
protected override void OnInit(事件参数e)
{
碱基.奥尼特(e);
lsttrandingsameasregistered.Items.Clear();
lstradingsameasregistered.Items.Add(“是”、“正确”);
lstradingsameasregistered.Items.Add(“否”、“假”);
lsHeadOfficeSameasRegistered.Items.Clear();
lsheadofficesameasregistered.Items.Add(“是”、“正确”);
lsheadofficesameasregistered.Items.Add(“否”、“假”);
如果(!IsPostBack)
{
LstradingSameasRegistered.SelectedIndex=IsTradingAddressSameAsRegistered?0:1;
lsHeadOfficeSameasRegistered.SelectedIndex=IShadofficeAddressSameasRegistered?0:1;
}
}
公共场所?GetCurrentValue(布尔模型值,列表控件)
{
如果(iPostBack)
{
var result=Request.Form[control.UniqueID].TryParseAs();
if(result.HasValue)
返回结果;
如果(control.SelectedValue==“True”)
返回true;
如果(control.SelectedValue==“False”)
返回false;
返回null;
}
否则返回模型值;
}
在Dev+Live数据库上,代码工作正常,但在UAT上,我在回发上调用GetCurrentValue()
后得到NullReferenceException
当我在lsHeadOfficeSameasRegisteredLabel
中选择一个新项目时,将引发PostBack
事件,并且在视图中,两个RadioButtonList
中的所选项目为null
项目的源代码是相同的,在测试期间,我只更改配置文件中的数据库路径。调试页面时,我没有收到任何其他错误
由于这只是绑定(我猜),可能会出现什么问题以及如何解决它?问题来自一个框架。我在我的应用程序中创建了一个自定义的DateTime'类,以避免更改服务器日期,当这个日期设置为将来时,会破坏应用程序某些部分中的.Net绑定。
我没有框架的全部源代码,因此无法进行更多调查,但将自定义日期设置为与
DateTime`相同的值可以解决问题。确保两个数据库中的数据相同。可能缺少一些数据。除了此特定页面的IDs数据相同之外。如果某些数据被删除,我会收到不同的错误消息,并且应该发生在我的数据层中。相反,我的包含静态数据的RadioButtonList
没有绑定。我看不到任何数据访问正在进行。您似乎缺少一些代码-您是否可以更新您的问题并提供IsTradingAddressSameAsRegistered
和IShadofficeAddressSameasRegistered
(这些看起来像属性,可能这就是发生某些数据访问的地方?)的代码?此外,您的OnInit看起来很奇怪。没有使用两个字符串参数的RadioButtonList.Items.Add重载。某处有扩展方法吗?是的,那是一种扩展。我发现,只有当变量设置为未来(类似于DateTime
class,允许在不更改服务器日期的情况下设置自定义日期)时,问题才会发生。我不明白问题的原因,我必须找到一个解决办法,让我的客户测试发票。有什么想法吗?