• 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ

我想用内联代码写进ASPX里,查资料说<%%>里不能写方法,有现成代码该如何拆分

feifei-0_o 哈尔滨工业大学 2021-04-21 11:13:58
该如何拆分
    <script language="c#" runat="server">
void loglog(object sender, EventArgs e)
{
string Path = @"D:\log\log.txt";
if (!System.IO.File.Exists(Path))
{
System.IO.FileStream f = System.IO.File.Create(Path);
f.Close();
f.Dispose();
}
System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true,
System.Text.Encoding.GetEncoding("gb2312"));
f2.WriteLine(Request["st"].ToString());
f2.Close();
f2.Dispose();
}
</script>


onclick="loglog"要调用这个方法/函数的,我开头想的是把定义去掉,然后把每句都拆成<%%>格式,但是这样的话下面的onclick就没法调用了,然后onclick="loglog"里面又不能写<%%>。写进ASPX里是因为没有.CS文件,没有源码,但是我只要添加一个功能就够了dll已经编译了,反编译的话好像要整个系统都反编译,没法弄。

还有<script language="c#" runat="server"></script>这个语法在本地的demo页面上可以运行,但是在服务器的大系统里面就不行(浏览器页面加载没问题,按按钮不记录信息,也就是不执行loglog,按F12错误信息:
log_lee.aspx:765 Uncaught ReferenceError: loglog is not defined at HTMLInputElement.onclick)
也不知道为什么,是不是按钮控件没读到上面页面里的代码啊,方法前面加了public还是这个错误,is not defined没有定义,可是我明明定义了呀。static的话Request这里又报错,CS0120对象引用对于非静态的字段、方法或属性“Page.Request”是必需的。加了Control.Page.又不行。。。我上网查了好久,这个关于未定义的错误代码都是关于JS的,但是我这个是C#的。这个实在是千古之谜,弄了好久了,就是想不通为什么,关于这个内联代码语法的问题,我可能会另开一个帖子,我要搞懂它为什么不行。可别嫌我啰嗦,很多人就是搞不明白我在说什么。

之前有个帖子https://bbs.csdn.net/topics/399167291有人说是语法错误,必须使用<%%>那个格式。
...全文
116 1 收藏 9
写回复
9 条回复
feifei-0_o 04月26日
引用
另外说一下你这个问题,这是因为这种脚本式的C#在高版本ie处于安全性考虑,已经禁止在互联中环境下使用了。 你可以试试把你单位的网站添加到可信网站试试,不保证能成功。
还有一点不明白,我这代码是在服务器里运行的呀,runat="server",<%%>我记得也是在服务器不是在客户端运行的,为什么跟IE还有关系了? 互联中环境下指的是啥?互联网环境?
回复 点赞
feifei-0_o 04月26日
引用 5 楼 非专业开发Five 的回复:
[quote=引用 4 楼 feifei-0_o 的回复:][quote=引用 1 楼 hui1202 的回复:]我建议你分离开写,后端接口写这个方法,前端用ajax去调用就好了

$('#dom元素id').click(()=>{
$.get('你的请求地址',(result)=>{
alert(result)
})
})


任意action(){
string Path = @"D:\log\log.txt";
            if (!System.IO.File.Exists(Path))
            {
                System.IO.FileStream f = System.IO.File.Create(Path);
                f.Close();
                f.Dispose();
            }
            System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true,
            System.Text.Encoding.GetEncoding("gb2312"));
            f2.WriteLine(Request["st"].ToString()); 
            f2.Close();
            f2.Dispose();
}

#dom元素id指的是Request["st"].ToString里的st吗?我测试的是一个文本框控件里的ID,是这个吗?第1段Java代码写在<script language="javascript" type="text/javascript"></script> 是吗?请求地址是什么?如何写?第2段代码的任意action()应该怎么写?我上网查了一下,ASP.NET 中使用action不是应该写在前台的吗?比如<form id="form1" action="Default.aspx" runat="server" method="post" > 你这怎么写的后台?搞不明白呀,不写的话后台代码又都报错,错误 CS8370 功能“顶级语句”在 C# 7.3 中不可用。请使用 9.0 或更高的语言版本。 我不是专业搞这个的,我只是个行政人员。[/quote] 你们两一个人在说controllorer action,一个在说Aspx、前端后台,互相说不明白。 另外我单独说一下这句话:
引用
我不是专业搞这个的,我只是个行政人员。
我们回答你问题的时候是不管你做什么的,你既然来程序员集中地方来问,那大家回答问题肯定会认为你是程序员,请你收起你的委屈,如果要发泄也请对给你安排任务的领导发泄,论坛的各位没有必要安抚你的情绪。 另外说一下你这个问题,这是因为这种脚本式的C#在高版本ie处于安全性考虑,已经禁止在互联中环境下使用了。 你可以试试把你单位的网站添加到可信网站试试,不保证能成功。 最后看了一下你的功能,你就是想把自己的请求信息全部记录在log文件里面,这个直接使用IIS的日志功能也可以实现。具体你可以百度一下。 [/quote] 好的谢谢,不过IIS的日志功能没我我要记录的信息选项。我说我只是个行政人员并没有发泄啊,我只是说明一下,毕竟这只是给网站添加一个小功能,这种事情也没必要啃完整本书看完整个教程,我也确实找了本书来看,《ASP.NET 入门经典 基于Visual Studio 2015 第9版》,不然我也没法问这些问题,好了,先结帖吧,到时候再问吧。
回复 点赞
引用 4 楼 feifei-0_o 的回复:
[quote=引用 1 楼 hui1202 的回复:]我建议你分离开写,后端接口写这个方法,前端用ajax去调用就好了

$('#dom元素id').click(()=>{
$.get('你的请求地址',(result)=>{
alert(result)
})
})


任意action(){
string Path = @"D:\log\log.txt";
            if (!System.IO.File.Exists(Path))
            {
                System.IO.FileStream f = System.IO.File.Create(Path);
                f.Close();
                f.Dispose();
            }
            System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true,
            System.Text.Encoding.GetEncoding("gb2312"));
            f2.WriteLine(Request["st"].ToString()); 
            f2.Close();
            f2.Dispose();
}

#dom元素id指的是Request["st"].ToString里的st吗?我测试的是一个文本框控件里的ID,是这个吗?第1段Java代码写在<script language="javascript" type="text/javascript"></script> 是吗?请求地址是什么?如何写?第2段代码的任意action()应该怎么写?我上网查了一下,ASP.NET 中使用action不是应该写在前台的吗?比如<form id="form1" action="Default.aspx" runat="server" method="post" > 你这怎么写的后台?搞不明白呀,不写的话后台代码又都报错,错误 CS8370 功能“顶级语句”在 C# 7.3 中不可用。请使用 9.0 或更高的语言版本。 我不是专业搞这个的,我只是个行政人员。[/quote] 你们两一个人在说controllorer action,一个在说Aspx、前端后台,互相说不明白。 另外我单独说一下这句话:
引用
我不是专业搞这个的,我只是个行政人员。
我们回答你问题的时候是不管你做什么的,你既然来程序员集中地方来问,那大家回答问题肯定会认为你是程序员,请你收起你的委屈,如果要发泄也请对给你安排任务的领导发泄,论坛的各位没有必要安抚你的情绪。 另外说一下你这个问题,这是因为这种脚本式的C#在高版本ie处于安全性考虑,已经禁止在互联中环境下使用了。 你可以试试把你单位的网站添加到可信网站试试,不保证能成功。 最后看了一下你的功能,你就是想把自己的请求信息全部记录在log文件里面,这个直接使用IIS的日志功能也可以实现。具体你可以百度一下。
回复 点赞
feifei-0_o 04月26日
引用 8 楼 三楼一郎 的回复:
[quote=引用 楼主 feifei-0_o 的回复:]该如何拆分
    <script language="c#" runat="server">
        void loglog(object sender, EventArgs e)
        {
            string Path = @"D:\log\log.txt";
            if (!System.IO.File.Exists(Path))
            {
                System.IO.FileStream f = System.IO.File.Create(Path);
                f.Close();
                f.Dispose();
            }
            System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true,
            System.Text.Encoding.GetEncoding("gb2312"));
            f2.WriteLine(Request["st"].ToString()); 
            f2.Close();
            f2.Dispose();
        }
    </script>
onclick="loglog"要调用这个方法/函数的,我开头想的是把定义去掉,然后把每句都拆成<%%>格式,但是这样的话下面的onclick就没法调用了,然后onclick="loglog"里面又不能写<%%>。写进ASPX里是因为没有.CS文件,没有源码,但是我只要添加一个功能就够了dll已经编译了,反编译的话好像要整个系统都反编译,没法弄。 还有<script language="c#" runat="server"></script>这个语法在本地的demo页面上可以运行,但是在服务器的大系统里面就不行(浏览器页面加载没问题,按按钮不记录信息,也就是不执行loglog,按F12错误信息: log_lee.aspx:765 Uncaught ReferenceError: loglog is not defined at HTMLInputElement.onclick)也不知道为什么,是不是按钮控件没读到上面页面里的代码啊,方法前面加了public还是这个错误,is not defined没有定义,可是我明明定义了呀。static的话Request这里又报错,CS0120对象引用对于非静态的字段、方法或属性“Page.Request”是必需的。加了Control.Page.又不行。。。我上网查了好久,这个关于未定义的错误代码都是关于JS的,但是我这个是C#的。这个实在是千古之谜,弄了好久了,就是想不通为什么,关于这个内联代码语法的问题,我可能会另开一个帖子,我要搞懂它为什么不行。可别嫌我啰嗦,很多人就是搞不明白我在说什么。 之前有个帖子https://bbs.csdn.net/topics/399167291有人说是语法错误,必须使用<%%>那个格式。
唉,又一个被微软忽悠瘸了的。 你新建个文本文件起名叫log.aspx,内容如下:

<%
           string Path = @"D:\log\log.txt";
            if (!System.IO.File.Exists(Path))
            {
                System.IO.FileStream f = System.IO.File.Create(Path);
                f.Close();
                f.Dispose();
            }
            System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true,
            System.Text.Encoding.GetEncoding("gb2312"));
            f2.WriteLine(Request["st"].ToString()); 
            f2.Close();
            f2.Dispose();
           
           response.write("True")
%>
然后浏览器地址栏直接输入:http://…………/log.aspx?st=logtest就可以把logtest写入D:\log\log.txt文件(当然前提是你这段代码没问题而且有权限),或者

<form name='form1' method="post" action="log.aspx">
<input name="st" type="text" value="logtest" />
<input name="button" type="button" value="提交" />
</form>
这种表单提交的方式,或者ajax之类的,jquery不会的话也可以直接原生javascript实现,当然前面的log.aspx也可以用.ashx、.asmx之类的替代,方法多了去了[/quote]懂了,谢谢,去试试
回复 点赞
三楼の郎 04月26日
引用 楼主 feifei-0_o 的回复:
该如何拆分
    <script language="c#" runat="server">
        void loglog(object sender, EventArgs e)
        {
            string Path = @"D:\log\log.txt";
            if (!System.IO.File.Exists(Path))
            {
                System.IO.FileStream f = System.IO.File.Create(Path);
                f.Close();
                f.Dispose();
            }
            System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true,
            System.Text.Encoding.GetEncoding("gb2312"));
            f2.WriteLine(Request["st"].ToString()); 
            f2.Close();
            f2.Dispose();
        }
    </script>
onclick="loglog"要调用这个方法/函数的,我开头想的是把定义去掉,然后把每句都拆成<%%>格式,但是这样的话下面的onclick就没法调用了,然后onclick="loglog"里面又不能写<%%>。写进ASPX里是因为没有.CS文件,没有源码,但是我只要添加一个功能就够了dll已经编译了,反编译的话好像要整个系统都反编译,没法弄。 还有<script language="c#" runat="server"></script>这个语法在本地的demo页面上可以运行,但是在服务器的大系统里面就不行(浏览器页面加载没问题,按按钮不记录信息,也就是不执行loglog,按F12错误信息: log_lee.aspx:765 Uncaught ReferenceError: loglog is not defined at HTMLInputElement.onclick)也不知道为什么,是不是按钮控件没读到上面页面里的代码啊,方法前面加了public还是这个错误,is not defined没有定义,可是我明明定义了呀。static的话Request这里又报错,CS0120对象引用对于非静态的字段、方法或属性“Page.Request”是必需的。加了Control.Page.又不行。。。我上网查了好久,这个关于未定义的错误代码都是关于JS的,但是我这个是C#的。这个实在是千古之谜,弄了好久了,就是想不通为什么,关于这个内联代码语法的问题,我可能会另开一个帖子,我要搞懂它为什么不行。可别嫌我啰嗦,很多人就是搞不明白我在说什么。 之前有个帖子https://bbs.csdn.net/topics/399167291有人说是语法错误,必须使用<%%>那个格式。
唉,又一个被微软忽悠瘸了的。 你新建个文本文件起名叫log.aspx,内容如下:

<%
           string Path = @"D:\log\log.txt";
            if (!System.IO.File.Exists(Path))
            {
                System.IO.FileStream f = System.IO.File.Create(Path);
                f.Close();
                f.Dispose();
            }
            System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true,
            System.Text.Encoding.GetEncoding("gb2312"));
            f2.WriteLine(Request["st"].ToString()); 
            f2.Close();
            f2.Dispose();
           
           response.write("True")
%>
然后浏览器地址栏直接输入:http://…………/log.aspx?st=logtest就可以把logtest写入D:\log\log.txt文件(当然前提是你这段代码没问题而且有权限),或者

<form name='form1' method="post" action="log.aspx">
<input name="st" type="text" value="logtest" />
<input name="button" type="button" value="提交" />
</form>
这种表单提交的方式,或者ajax之类的,jquery不会的话也可以直接原生javascript实现,当然前面的log.aspx也可以用.ashx、.asmx之类的替代,方法多了去了
回复 点赞
hui1202 04月22日
引用 2 楼 feifei-0_o 的回复:
[quote=引用 1 楼 hui1202 的回复:]我建议你分离开写,后端接口写这个方法,前端用ajax去调用就好了

$('#dom元素id').click(()=>{
$.get('你的请求地址',(result)=>{
alert(result)
})
})


任意action(){
string Path = @"D:\log\log.txt";
            if (!System.IO.File.Exists(Path))
            {
                System.IO.FileStream f = System.IO.File.Create(Path);
                f.Close();
                f.Dispose();
            }
            System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true,
            System.Text.Encoding.GetEncoding("gb2312"));
            f2.WriteLine(Request["st"].ToString()); 
            f2.Close();
            f2.Dispose();
}

那这样的话能不能给一个完整的.CS文件的代码?还有后端已经编译成.dll了,并且这个dll文件里面有超多的的后端代码,没法改。能不能就是ASPX在有dll文件的同时也指向.CS文件?也就是说JINDIsoft.dll里面的后端代码与log_lee.aspx.cs里面的后端代码共同生效。 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="log_lee.aspx.cs" Inherits="JINDIsoft.log" %> (我搜索过这个问题了,没有搜到答案)[/quote] dll只是一个引用文件啊,你引用了使用里面的方法肯定没任何问题啊。。。 aspx也好,ashx也好,mvc也好只是个返回结果的地址,你逻辑写在里面就好了
回复 点赞
feifei-0_o 04月22日
引用 1 楼 hui1202 的回复:
我建议你分离开写,后端接口写这个方法,前端用ajax去调用就好了

$('#dom元素id').click(()=>{
$.get('你的请求地址',(result)=>{
alert(result)
})
})


任意action(){
string Path = @"D:\log\log.txt";
            if (!System.IO.File.Exists(Path))
            {
                System.IO.FileStream f = System.IO.File.Create(Path);
                f.Close();
                f.Dispose();
            }
            System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true,
            System.Text.Encoding.GetEncoding("gb2312"));
            f2.WriteLine(Request["st"].ToString()); 
            f2.Close();
            f2.Dispose();
}

那这样的话能不能给一个完整的.CS文件的代码?还有后端已经编译成.dll了,并且这个dll文件里面有超多的的后端代码,没法改。能不能就是ASPX在有dll文件的同时也指向.CS文件?也就是说JINDIsoft.dll里面的后端代码与log_lee.aspx.cs里面的后端代码共同生效。 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="log_lee.aspx.cs" Inherits="JINDIsoft.log" %> (我搜索过这个问题了,没有搜到答案)
回复 点赞
feifei-0_o 04月22日
引用 1 楼 hui1202 的回复:
我建议你分离开写,后端接口写这个方法,前端用ajax去调用就好了

$('#dom元素id').click(()=>{
$.get('你的请求地址',(result)=>{
alert(result)
})
})


任意action(){
string Path = @"D:\log\log.txt";
            if (!System.IO.File.Exists(Path))
            {
                System.IO.FileStream f = System.IO.File.Create(Path);
                f.Close();
                f.Dispose();
            }
            System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true,
            System.Text.Encoding.GetEncoding("gb2312"));
            f2.WriteLine(Request["st"].ToString()); 
            f2.Close();
            f2.Dispose();
}

#dom元素id指的是Request["st"].ToString里的st吗?我测试的是一个文本框控件里的ID,是这个吗?第1段Java代码写在<script language="javascript" type="text/javascript"></script> 是吗?请求地址是什么?如何写?第2段代码的任意action()应该怎么写?我上网查了一下,ASP.NET 中使用action不是应该写在前台的吗?比如<form id="form1" action="Default.aspx" runat="server" method="post" > 你这怎么写的后台?搞不明白呀,不写的话后台代码又都报错,错误 CS8370 功能“顶级语句”在 C# 7.3 中不可用。请使用 9.0 或更高的语言版本。 我不是专业搞这个的,我只是个行政人员。
回复 点赞
hui1202 04月22日
我建议你分离开写,后端接口写这个方法,前端用ajax去调用就好了

$('#dom元素id').click(()=>{
$.get('你的请求地址',(result)=>{
alert(result)
})
})


任意action(){
string Path = @"D:\log\log.txt";
            if (!System.IO.File.Exists(Path))
            {
                System.IO.FileStream f = System.IO.File.Create(Path);
                f.Close();
                f.Dispose();
            }
            System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true,
            System.Text.Encoding.GetEncoding("gb2312"));
            f2.WriteLine(Request["st"].ToString()); 
            f2.Close();
            f2.Dispose();
}

回复 点赞
发动态
发帖子
.NET技术社区
创建于2007-09-28

4.9w+

社区成员

66.8w+

社区内容

.NET技术交流专区
社区公告
暂无公告