[英]Creating a master page in ASP.NET error on markup aspx page
我嘗試在ASP.NET中創建母版頁
我在需要調用母版頁的sDefault.aspx頁面的標記上遇到此錯誤:
CS0103: The name 'Base64ForUrlEncode' does not exist in the current context.
為什么我有這個錯誤? 在MasterPage.master.cs中,我插入了:
public static string Base64ForUrlEncode(string str)
{
byte[] encbuff = Encoding.UTF8.GetBytes(str);
return HttpServerUtility.UrlTokenEncode(encbuff);
}
我已經嘗試過這種解決方案,但沒有成功。
該如何解決呢? 我的代碼如下。
這是MasterPage.master.cs的代碼
public partial class MasterPage : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
InitializeCulture();
}
}
protected void InitializeCulture()
{
Page.Culture = "en-US";
Page.UICulture = "en-US";
}
public static string Base64ForUrlEncode(string str)
{
byte[] encbuff = Encoding.UTF8.GetBytes(str);
return HttpServerUtility.UrlTokenEncode(encbuff);
}
public static string Base64ForUrlDecode(string str)
{
byte[] decbuff = HttpServerUtility.UrlTokenDecode(str);
return Encoding.UTF8.GetString(decbuff);
}
}
這是MasterPage.master的代碼
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
<style type="text/css">
.labelStyle {
color: red;
background-color: yellow;
border: Solid 2px Red;
margin-left: auto;
margin-right: auto;
width: 30em;
display: block;
text-align: center;
}
.image {
margin-left: auto;
margin-right: auto;
}
.toUpper {
text-transform: uppercase;
}
.header {
background-color: #686565;
font: bold;
color: #686565;
text-align: center;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.5.2/jquery-ui.min.js"></script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
這是頁面sDefault.aspx的標記 ,我需要在其中調用母版頁:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="sDefault.aspx.cs"
Inherits="sDefault" MasterPageFile="MasterPage.master" %>
<%@ MasterType virtualPath="MasterPage.master"%>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:GridView ID="gvProducts"
AutoGenerateColumns="False"
EmptyDataText="No data"
EnableViewState="true"
runat="server"
DataKeyNames="sID"
HorizontalAlign="Center">
<AlternatingRowStyle CssClass="altrows" />
<Columns>
<asp:TemplateField
HeaderText="Nr"
ItemStyle-CssClass="ddl_Class_new"
ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:HyperLink runat="server"
NavigateUrl='<%#(String.IsNullOrEmpty(Eval("Nr").ToString()) ? "" :
Eval("Nr").ToString().Equals("0") ? "" :
String.Format("sExport1.aspx?d={0}&s={1}",
Base64ForUrlEncode(HttpUtility.UrlEncode(Eval("d").ToString())),
HttpUtility.UrlEncode(Base64ForUrlEncode("s")))) %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Content>
編輯#1
Default.asp.cs中的代碼隱藏
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
MasterPage MasterPage = (MasterPage)Page.Master;
MasterPage.Base64ForUrlEncode(null);
}
}
編輯#2
Default.asp.cs中的代碼隱藏
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
MasterPage mp = (MasterPage)Page.Master;
string test = mp.Base64ForUrlEncode("TestUrl");
}
}
標記aspx
<asp:TemplateField>
<ItemTemplate>
<%# mp.Base64ForUrlEncode("TestUrl") %>
</ItemTemplate>
</asp:TemplateField>
MasterPage.master.cs
public string Base64ForUrlEncode(string str)
{
byte[] encbuff = Encoding.UTF8.GetBytes(str);
return HttpServerUtility.UrlTokenEncode(encbuff);
}
Base64ForUrlEncode
在母版頁類( public partial class MasterPage
)中,而aspx頁sDefault
擁有它自己的。 因此,除非您在aspx上指定名稱空間,否則無法找到該方法。
<%= YourNameSpace.MasterPage.Base64ForUrlEncode("test") %>
更新資料
public MasterPage master;
protected void Page_Load(object sender, EventArgs e)
{
master = (MasterPage)Page.Master;
string s = master.Base64ForUrlEncode("test");
}
然后將Master Public中的Base64ForUrlEncode
方法Base64ForUrlEncode
非靜態
public string Base64ForUrlEncode(string str)
{
}
現在您可以直接在aspx上引用它
<ItemTemplate>
<%# master.Base64ForUrlEncode("TestUrl") %>
</ItemTemplate>
我想參考一下您的修改1:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
MasterPage MasterPage = (MasterPage)Page.Master;
MasterPage.Base64ForUrlEncode(null);
}
}
更改為:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
MasterPage mp = (MasterPage)Page.Master;
string test = mp.Base64ForUrlEncode("your test string");
}
}
如果您只有1個字段和/或在后面的代碼中引用一個函數來構建URL,則可以將網格更改為中繼器。
恕我直言,這是太多的邏輯:
<asp:HyperLink runat="server"
NavigateUrl='<%#(String.IsNullOrEmpty(Eval("Nr").ToString()) ? "" :
Eval("Nr").ToString().Equals("0") ? "" :
String.Format("sExport1.aspx?d={0}&s={1}",
Base64ForUrlEncode(HttpUtility.UrlEncode(Eval("d").ToString())),
HttpUtility.UrlEncode(Base64ForUrlEncode("s")))) %>' />
(或“綁定項目數據”)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.