我正在使用Webforms,C#,Vs 2013
我尝试使用PreviousPage访问另一个Form表单。
所以我将以下内容添加到第二页:
<%@ PreviousPageType VirtualPath="~/Survey.aspx" %>
我添加此代码后,会自动生成以下代码:
public new HousingSurvey.HousingSurvey PreviousPage {
get {
return ((HousingSurvey.HousingSurvey)(base.PreviousPage));
}
}
我得到了
Error 31 The type name 'HousingSurvey' does not exist in the type 'HousingSurvey.HousingSurvey'
HousingSurvey类在Survey.aspx中定义
<%@ Page EnableEventValidation="false" MaintainScrollPositionOnPostback="true" Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Survey.aspx.cs" Inherits="HousingSurvey.HousingSurvey" %>
答案 0 :(得分:0)
生成的方法可以正常工作,因为前一页确实属于所述类型。
如果上一页可以属于另一种类型,则需要单独保留生成的方法,并使用自己的方法或属性进行健全性检查。这涵盖了上一页不是预期页面的情况。我有这种情况,例如,当用户在目标页面上更改语言时。
这是我的代码(在Target.aspx.cs中):
/// <summary>
/// Gets the previous page, if it was an instance of the "MyPrevious.aspx" page.
/// </summary>
/// <remarks>This access is used for the access to data from the "MyPrevious.aspx" page.</remarks>
/// <value>
/// The previous page, if it was an instance of the "MyPrevious.aspx" page, null otherwise.
/// </value>
private MyPrevious CheckedPreviousPage {
get {
if (base.PreviousPage != null) {
if (base.PreviousPage is MyPrevious) {
return PreviousPage;
}
}
return null;
}
}
以下是如何使用该属性(在Target.aspx.cs中):
if ((CheckedPreviousPage != null) && (CheckedPreviousPage.IsCrossPagePostBack)) {
//Cross page post, populating fields
MyTextBox.Text = CheckedPreviousPage.SomeTextBox.Text;
}
此代码显式使用base.PreviousPage
getter属性和自定义检查,避免使用生成的方法。