想实现一个功能,好几天了,没有进展,贴上带详细注释的代码,各位高手进来看看,指导指导!

x_aini 2015-08-10 06:20:43
我想实现的功能是,用户选择一个图片作为生成静态页面后的页面背景图。
以下是我的流程。
1、生成静态页面是在posttwo.aspx页面的cs文件中的Button_click事件中读取事先做好的静态模板页:JTHTML.htm,最终生成静态文件。用户选择图片是在,imageHead.aspx页面。
2、post.aspx页面将用户选择的图片路径利用form表单的post属性传递到页面posttwo.aspx页面。
3、在posttwo.aspx页面的cs文件中生成静态页面。利用.net控件Button将传递来的图片路径做字符串替换,替换掉模板页中的特定字符串以生成静态页面。
4、现在问题是在传递到posttwo.aspx页面的图片路径参数,没有办法把替换掉模板页中的特殊字符串。
以下是详细的代码
最后,我将这个小案例打包上传到CSDN提供下载,高手若不忙的话可以帮忙下载调试一下,感谢!


发帖只能一千字内,这个是项目下载地址:http://download.csdn.net/detail/x_aini/8986703

以下是post.aspx前台页面: post.aspx页面后台cs文件没有任何功能。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="post.aspx.cs" Inherits="post" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>

<script language=javascript>
//此函数用于将ImageHead.aspx页面的选择结果的图片路径作为函数值。ImageHead.aspx页面功能是用户点击选择图片。
function deal() {
var someValue;
someValue = window.showModalDialog('ImageHead.aspx', '', 'Width=400;Height=200;status=no;help=no;scrollbars=no');//以窗口的形式打开页面ImageHead.aspx;
if (someValue == undefined) {
someValue = "1";
}
return document.getElementById("body").style.backgroundImage = "url('images/image" + (parseInt(someValue) + 1) + ".jpg')";//最主要功能是想把这里最终用户选择的图片路径传递给posttwo.aspx页面用于生成一个静态html页,图片路径作为静态html页的页面背景图片。
}

//此函数用于将上面函数deal()的返回值给页面的input
function canshu(pad) {
var padd = pad;
var newElement = document.getElementById("can");
newElement.value = pad;
}
</script>

<form id="form1" method="post" action="posttwo.aspx">
<div style="width:1024;height:1000;" id="body">
<input type="text" id="can" name="lcan"/>
<input type="submit" value="选择页面背景" onclick="canshu(deal())"/><%--在这里调用上面JS函数canshu()将图片路径利用form 的Post传递到页面posttwo.aspx--%>
</div>
</form>
</body>
</html>




以下是posttwo.aspx页面前台:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="posttwo.aspx.cs" Inherits="posttwo" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<div id="" style="width:1024;height:1000;">
<form id="form2" runat="server">
<div>
输入框1:<asp:TextBox ID="txtTitle" runat="server"></asp:TextBox><br />
输入框2:<asp:TextBox ID="txtContent" runat="server"></asp:TextBox><br />
输入框3:<asp:TextBox ID="Jieshao" runat="server"></asp:TextBox><br />
<br />
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="生成静态页面" /><br /><%--点击此按钮生成静态页面到文件夹htm。--%>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br />
</div>
</form>
</body>
</html>



以下是posttwo.aspx页面的CS文件:


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net;
using System.Text;
using System.IO;

public partial class posttwo : System.Web.UI.Page
{
string canshu;
protected void Page_Load(object sender, EventArgs e)
{
canshu = Request.Form["lcan"];//接收post.aspx页面传来的图片路径给变量canshu
}

protected void Button1_Click(object sender, EventArgs e)
{
//源码是替换掉模板中的特征字符

string mbPath = Server.MapPath("JTHTML.htm");//读取静态模板页。
Encoding code = Encoding.GetEncoding("utf-8");
StreamReader sr = null;
StreamWriter sw = null;
string str = null;
//读取
try
{
sr = new StreamReader(mbPath, code);
str = sr.ReadToEnd();

}
catch (Exception ex)
{
throw ex;
}
finally
{
sr.Close();
}

//根据时间自动重命名,扩展名也可以自行修改
string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".htm";
str = str.Replace("$title$", txtTitle.Text);//替换Title
str = str.Replace("$content$", txtContent.Text);
str = str.Replace("$jieshao$", Jieshao.Text);
str = str.Replace("$imgurl$", canshu);//这里想用传递来的图片路径替换掉字符串$imgurl$

//生成静态文件
try
{
sw = new StreamWriter(Server.MapPath("htm/") + fileName, false, code);
sw.Write(str);
sw.Flush();

}
catch (Exception ex)
{
throw ex;
}
finally
{
sw.Close();
Response.Write("恭喜<a href=htm/" + fileName + " target=_blank>" + fileName + "</a>已经生成,保存在htm文件夹下!");

}
}

}


以下是静态模板页代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div style="width:1024;height:1000;background-image:$imgurl$"><!--传递到posttwo.aspx页面的图片路径最终通过生成静态,图片路径替换掉这里的字符串$imaurl$-->
<h1>$title$</h1>
<h2>$content$</h2>
<h3>$jieshao$</h3>
</div>
</body>
</html>
...全文
482 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
我现在在路上 2015-08-11
  • 打赏
  • 举报
回复
引用 14 楼 x_aini 的回复:
JS调试是按F12,在Debugger中调试(浏览器的功能,别用360什么的,可以用IE ) 后端调试是使用VS中的断点,然后可以一行一行调试(F10),断点是F9 可以查看调试中的变量等的值,可以使用【快速监视】
x_aini 2015-08-11
  • 打赏
  • 举报
回复
引用 9 楼 starfd 的回复:
string canshu
{
    get{return ViewState["urlparam"] as string;}
    set {ViewState["urlparam"] = value;}
}
把你的canshu字段改成属性,通过ViewState持久,就满足你的要求了,你早说在Page_Load事件里面能难道canshu早就解决了 因为ASP.NET是无状态的,Page_Load和Click是两次回发了 另外注意加IsPostBack判断,这样在回发时就不会重复赋值
protected void Page_Load(object sender, EventArgs e)
    {
if(!IsPostBack){
        canshu = Request.Form["lcan"];//接收post.aspx页面传来的图片路径给变量canshu
}
    }
感谢您的耐心回答。我明白了什么,我再试试,暂时先不结贴,无以为报,分都是您的。。。
x_aini 2015-08-11
  • 打赏
  • 举报
回复
引用 12 楼 Z65443344 的回复:
还有,提问要注意提问的艺术 把问题简单明了的放出来 如果不知道问题在哪,那就先自己调试,调试到问题出现的地方 最起码也应该放出大体的设计和伪代码,而不是把整个源码一股脑的放出来 即使你还在上学,老师也没有几个有耐心给你从头到尾的检查错误的 自学为主,问问题为辅
好吧,吸收您的意见,错了错了,以后不敢这么问了。不过,像楼上兄弟说的,怎么断点调试呢?我在网上找了找,好像没有好的教程,还是不会。。。。。前辈支招啊
於黾 2015-08-11
  • 打赏
  • 举报
回复
还有,提问要注意提问的艺术 把问题简单明了的放出来 如果不知道问题在哪,那就先自己调试,调试到问题出现的地方 最起码也应该放出大体的设计和伪代码,而不是把整个源码一股脑的放出来 即使你还在上学,老师也没有几个有耐心给你从头到尾的检查错误的 自学为主,问问题为辅
於黾 2015-08-11
  • 打赏
  • 举报
回复
不会就去学 如果你不会,又不想学,那还来问什么 直接花RMB去淘个现成的得了
wish907 2015-08-11
  • 打赏
  • 举报
回复
引用 4 楼 x_aini 的回复:
[quote=引用 2 楼 wish907 的回复:] [quote=引用 1 楼 starfd 的回复:] 前端调试+后端调试,一样样来啊 你的posttwo接收到canshu 了吗?
调试,没有多少人想看一大堆代码取回答的[/quote] 嗯,好吧,对不起。上传一大堆代码实在是无奈。还有个原因是我太菜,不会断点调式或者debug调试。[/quote] 调试这么必须的技能,你如果想要继续编程下去是必须的。 .NET的控件你用断点取单步走一遍,就能感受到什么是楼上说的二次回发了,而不是在想当然的问,为什么这里可以,那里不行。
  • 打赏
  • 举报
回复
string canshu
{
    get{return ViewState["urlparam"] as string;}
    set {ViewState["urlparam"] = value;}
}
把你的canshu字段改成属性,通过ViewState持久,就满足你的要求了,你早说在Page_Load事件里面能难道canshu早就解决了 因为ASP.NET是无状态的,Page_Load和Click是两次回发了 另外注意加IsPostBack判断,这样在回发时就不会重复赋值
protected void Page_Load(object sender, EventArgs e)
    {
if(!IsPostBack){
        canshu = Request.Form["lcan"];//接收post.aspx页面传来的图片路径给变量canshu
}
    }
x_aini 2015-08-11
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
前端调试+后端调试,一样样来啊 你的posttwo接收到canshu 了吗?
引用 2 楼 wish907 的回复:
[quote=引用 1 楼 starfd 的回复:] 前端调试+后端调试,一样样来啊 你的posttwo接收到canshu 了吗?
调试,没有多少人想看一大堆代码取回答的[/quote]
引用 11 楼 Z65443344 的回复:
不会就去学 如果你不会,又不想学,那还来问什么 直接花RMB去淘个现成的得了
引用 15 楼 ta_wuhen 的回复:
[quote=引用 14 楼 x_aini 的回复:]
JS调试是按F12,在Debugger中调试(浏览器的功能,别用360什么的,可以用IE ) 后端调试是使用VS中的断点,然后可以一行一行调试(F10),断点是F9 可以查看调试中的变量等的值,可以使用【快速监视】[/quote] 感谢各位的帮助,总算把功能实现出来了,虽然对于许多深层次的原理,比如二次回发什么的理解的还不是很透彻,但在各位的帮助下总算有很大的收获。真心感谢。在技术的道路上,以后可能还有许多问题要在这里提问,还请各位多多指教!
x_aini 2015-08-10
  • 打赏
  • 举报
回复
我尊敬又伟大的各位神啊!!!!阿门,你们在哪里?显显灵吧!!!!阿门阿门!!!
x_aini 2015-08-10
  • 打赏
  • 举报
回复
引用 6 楼 starfd 的回复:
替换出来的html对了吗? $imgurl$最终是什么文本,是不是路径问题导致背景不对 最好你的url组织的时候用根路径 "url('/images/image" + (parseInt(someValue) + 1) + ".jpg')"
我又试了一下,把 canshu = Request.Form["lcan"];接收语句放在页面的Page_Load事件里面可以完美接收并且替换。把Request.Form["lcan"]按钮事件里死活接收不到。虽然这样可以实现,但是把所有的功能都放在Page_Load里根本没时间让用户填写其他表单。


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net;
using System.Text;
using System.IO;

public partial class posttwo : System.Web.UI.Page
{
   
    protected void Page_Load(object sender, EventArgs e)
    {
        string canshu = Request.Form["lcan"];//接收post.aspx页面传来的图片路径给变量canshu
                string mbPath = Server.MapPath("JTHTML.htm");//读取静态模板页。
        Encoding code = Encoding.GetEncoding("utf-8");
        StreamReader sr = null;
        StreamWriter sw = null;
        string str = null;
        //读取
        try
        {
            sr = new StreamReader(mbPath, code);
            str = sr.ReadToEnd();

        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            sr.Close();
        }
        string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".htm";
        str = str.Replace("$imgurl$",canshu);
        try
        {
            sw = new StreamWriter(Server.MapPath("htm/") + fileName, false, code);
            sw.Write(str);
            sw.Flush();

        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            sw.Close();
            Response.Write("恭喜<a href=htm/" + fileName + " target=_blank>" + fileName + "</a>已经生成,保存在htm文件夹下!");

        }
    }

    //protected void Button1_Click(object sender, EventArgs e)
    //{
    //    //源码是替换掉模板中的特征字符
        
    //    string mbPath = Server.MapPath("JTHTML.htm");//读取静态模板页。
    //    Encoding code = Encoding.GetEncoding("utf-8");
    //    StreamReader sr = null;
    //    StreamWriter sw = null;
    //    string str = null;
    //    //读取
    //    try
    //    {
    //        sr = new StreamReader(mbPath, code);
    //        str = sr.ReadToEnd();

    //    }
    //    catch (Exception ex)
    //    {
    //        throw ex;
    //    }
    //    finally
    //    {
    //        sr.Close();
    //    }

    //    //根据时间自动重命名,扩展名也可以自行修改
    //    string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".htm";
    //    str = str.Replace("$title$", txtTitle.Text);//替换Title
    //    str = str.Replace("$content$", txtContent.Text);
    //    str = str.Replace("$jieshao$", Jieshao.Text);
    //    //这里想用传递来的图片路径替换掉字符串$imgurl$

    //    //生成静态文件
    //    try
    //    {
    //        sw = new StreamWriter(Server.MapPath("htm/") + fileName, false, code);
    //        sw.Write(str);
    //        sw.Flush();

    //    }
    //    catch (Exception ex)
    //    {
    //        throw ex;
    //    }
    //    finally
    //    {
    //        sw.Close();
    //        Response.Write("恭喜<a href=htm/" + fileName + " target=_blank>" + fileName + "</a>已经生成,保存在htm文件夹下!");

    //    }
    //}

}
  • 打赏
  • 举报
回复
替换出来的html对了吗? $imgurl$最终是什么文本,是不是路径问题导致背景不对 最好你的url组织的时候用根路径 "url('/images/image" + (parseInt(someValue) + 1) + ".jpg')"
x_aini 2015-08-10
  • 打赏
  • 举报
回复
各位大神啊,支个招吧!!!!!!!!!!!有偿服务都行啊!!!!!
x_aini 2015-08-10
  • 打赏
  • 举报
回复
引用 2 楼 wish907 的回复:
[quote=引用 1 楼 starfd 的回复:] 前端调试+后端调试,一样样来啊 你的posttwo接收到canshu 了吗?
调试,没有多少人想看一大堆代码取回答的[/quote] 嗯,好吧,对不起。上传一大堆代码实在是无奈。还有个原因是我太菜,不会断点调式或者debug调试。
x_aini 2015-08-10
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
前端调试+后端调试,一样样来啊 你的posttwo接收到canshu 了吗?
首先感谢您看一大堆代码,有劳您了。这个我确定接收到了,因为我不会断点或者debug调试,我就在posttwo页面放了个lable,把传递过来的值付给他,这个是可以的。但是不知道为什么不能替换掉模板页的特殊字符串。
wish907 2015-08-10
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
前端调试+后端调试,一样样来啊 你的posttwo接收到canshu 了吗?
调试,没有多少人想看一大堆代码取回答的
  • 打赏
  • 举报
回复
前端调试+后端调试,一样样来啊 你的posttwo接收到canshu 了吗?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧