小编Vit*_*toc的帖子

ASP.NET WebForms自定义UserControl - base.SaveViewState()返回null - 为什么?

我有一个自定义UserControl我正在使用哪些主机动态创建控件,我遇到了一个奇怪的情况,我似乎失去了ViewState信息.在我对base.SaveViewState()调用的重写的SaveViewState方法中,我希望它返回一个包含ViewState中所有内容的对象,但它返回null.

protected override object SaveViewState()
{

    object[] tempState = new object[2];
    tempState[0] = base.SaveViewState(); //***suspected issue here, tempState[0] == null -- why?
    //? this.ViewState["CompanyID"] returns me the guid I'm expecting
    //... code instantiating and populating lstDataControlInfos
    tempState[1] = lstDataControlInfos;
    return tempState;
}
Run Code Online (Sandbox Code Playgroud)

我在该方法中放置了一个断点,我可以使用立即窗口查询ViewState ["CompanyID"]并验证ViewState中确实存在一个CompanyID.也许我误解了一些关于ViewState的东西,但该调用是否应该返回已经存在于ViewState中的内容(包括我的CompanyID)?在重写的LoadViewState方法中,问题在回发上成为问题,因为我不再有任何方法将CompanyID从ViewState中取出; 它回来了.

protected override void LoadViewState(object savedState)
{
    object[] tempState = (object[])savedState;
    //tempState[0] == null, as it was stored in the previous SaveViewState call
    //any reference to ViewState["CompanyID"] comes back null
    base.LoadViewState(tempState[0]);
}
Run Code Online (Sandbox Code Playgroud)

我提到我有动态控件我正在序列化并从此控件中的ViewState反序列化,这些似乎都正常工作.什么会导致base.SaveViewState()在我知道事实时返回null并且可以在SaveViewState调用期间验证(通过立即窗口)ViewState中是否有数据?

c# asp.net viewstate user-controls webforms

5
推荐指数
1
解决办法
1637
查看次数

Web浏览器是否尝试修复错误/弃用的HTML?

我正在跟踪ASP.NET WebForms项目中的一些交叉兼容性问题,并且我遇到了一些特殊的行为.使用不同的浏览器访问同一页面会产生不同的结果,这种情况经常发生.对这个案例感到好奇的是,当我在不同的浏览器中查看源代码时,它向我展示了不同的html.

IE 10:

<td id="ctl00_MainMenu-menuItem010" onclick="javascript:skm_closeSubMenus(document.getElementById('ctl00_MainMenu'));location.href='../Nurse/nurses_patients.aspx';" onmouseover="javascript:skm_mousedOverMenu('ctl00_MainMenu',this, document.getElementById('ctl00_MainMenu'), false, '');skm_shimSetVisibility(true,'ctl00_MainMenu-menuItem010-subMenu');" onmouseout="javascript:skm_mousedOutMenu('ctl00_MainMenu', this, '');this.className='';" style="cursor:hand;"><font face="Verdana"><b>Patients</b></font></td>
Run Code Online (Sandbox Code Playgroud)

FF:

<td id="ctl00_MainMenu-menuItem010" onclick="javascript:skm_closeSubMenus(document.getElementById('ctl00_MainMenu'));location.href='../Nurse/nurses_patients.aspx';" onmouseover="javascript:skm_mousedOverMenu('ctl00_MainMenu',this, document.getElementById('ctl00_MainMenu'), false, '');" onmouseout="javascript:skm_mousedOutMenu('ctl00_MainMenu', this, '');this.className='';" style="cursor:pointer;">Patients</td>
Run Code Online (Sandbox Code Playgroud)

铬:

<td id="ctl00_MainMenu-menuItem010" onclick="javascript:skm_closeSubMenus(document.getElementById('ctl00_MainMenu'));location.href='../Nurse/nurses_patients.aspx';" onmouseover="javascript:skm_mousedOverMenu('ctl00_MainMenu',this, document.getElementById('ctl00_MainMenu'), false, '');" onmouseout="javascript:skm_mousedOutMenu('ctl00_MainMenu', this, '');this.className='';" style="cursor:pointer;">Patients</td>
Run Code Online (Sandbox Code Playgroud)

请注意IE版本中的额外<font>和<b>标记.这是一个我正在维护的旧应用程序.它使用skm Menu控件,并在控件的属性中显式设置粗体和Verdana字体.

<SKM:menu id="MainMenu" runat="server" Cursor="Pointer" ItemPadding="7" Font-Bold="True" Font-Size="12px" 
                            Font-Names="Verdana" ItemSpacing="0" BorderColor="Black" BorderWidth="1px" BorderStyle="solid" GridLines="Both"
                            BackColor="silver" Layout="Horizontal">
                            <SelectedMenuItemStyle ForeColor="Red" BackColor="White" />
                     </SKM:menu>
Run Code Online (Sandbox Code Playgroud)

让我感到困惑的是,这是我们使用IE9在View Source中看到的html:

<td id="ctl00_MainMenu-menuItem010" onclick="javascript:skm_closeSubMenus(document.getElementById('ctl00_MainMenu'));location.href='../Nurse/nurses_patients.aspx';" onmouseover="javascript:skm_mousedOverMenu('ctl00_MainMenu',this, document.getElementById('ctl00_MainMenu'), false, '');skm_shimSetVisibility(true,'ctl00_MainMenu-menuItem010-subMenu');" onmouseout="javascript:skm_mousedOutMenu('ctl00_MainMenu', this, '');this.className='';" style="cursor:hand;">Patients</td>
Run Code Online (Sandbox Code Playgroud)

我正在尝试追踪是否是基于UserAgent呈现不同html的服务器,或者浏览器是否通过即时更改并在查看源时显示"已清理"版本来尝试智能.希望它不是两者的某种组合.

编辑:在将主机从Win2k3服务器迁移到Win2k3 R2服务器之前,我(或者说客户)没有注意到这一点.如果我从IE10点击R2服务器,我会得到那些额外的标签.如果我从IE10点击非R2服务器,我不会得到这些标签.完全相同的代码和IIS6.

html asp.net

5
推荐指数
1
解决办法
182
查看次数

标签 统计

asp.net ×2

c# ×1

html ×1

user-controls ×1

viewstate ×1

webforms ×1