标签归档:WebForm

ASP.NET WebForm 根据请求显示 不同的页面(类似PHP的include)

protected void Page_Load(object sender, EventArgs e)
{
    var area = Request.QueryString["id"].ToUpper();
    if (area == "Z")
    {
        StringWriter writer = new StringWriter();
        Server.Execute("z.aspx", writer);
        String html = writer.ToString();
        Response.Write(html);
    }
    else
    {
        StringWriter writer = new StringWriter();
        Server.Execute("area.aspx", writer);
        String html = writer.ToString();
        Response.Write(html);
    }
     
}

ASP.NET WebForm 下载文件,兼容各个浏览器,下载文件名无乱码

protected void btnDownload_Click(object sender, EventArgs e)
{
    string webPath = Request.QueryString["filename"];
    string filePath = Server.MapPath(webPath);//路径
    FileInfo fileInfo = new FileInfo(filePath);
    string fileName = fileInfo.Name; //客户端保存的文件名

    if (fileInfo.Exists == true)
    {
        const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
        byte[] buffer = new byte[ChunkSize];

        Response.Clear();
        System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
        long dataLengthToRead = iStream.Length;//获取下载的文件总大小
        Response.ContentType = "application/octet-stream";

        if (Request.UserAgent.ToLower().IndexOf("msie") > -1 )
        {   
            Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
        }
        else if (Request.UserAgent.ToLower().IndexOf("firefox") > -1)
        {
            //为了向客户端输出空格,需要在当客户端使用 Firefox 时特殊处理     
            Response.AddHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
        }
        else if (Request.UserAgent.ToLower().IndexOf("edge") > -1) // edeg浏览器
        {
            Response.AddHeader("Content-Disposition", "attachment;filename=" + ToHexString(fileName));
        }
        else
        {
            Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
        }

        while (dataLengthToRead > 0 && Response.IsClientConnected)
        {
            int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
            Response.OutputStream.Write(buffer, 0, lengthRead);
            Response.Flush();
            dataLengthToRead = dataLengthToRead - lengthRead;
        }
        Response.Close();
    }

}

/// <summary> 
/// 为字符串中的非英文字符编码 
/// </summary> 
/// <param name="s"></param> 
/// <returns></returns> 
public string ToHexString(string s)
{
    char[] chars = s.ToCharArray();
    StringBuilder builder = new StringBuilder();
    for (int index = 0; index < chars.Length; index++)
    {
        bool needToEncode = NeedToEncode(chars[index]);
        if (needToEncode)
        {
            string encodedString = ToHexString(chars[index]);
            builder.Append(encodedString);
        }
        else
        {
            builder.Append(chars[index]);
        }
    }
    return builder.ToString();
}
/// <summary> 
///指定 一个字符是否应该被编码 
/// </summary> 
/// <param name="chr"></param> 
/// <returns></returns> 
private bool NeedToEncode(char chr)
{
    string reservedChars = "$-_.+!*'(),@=&";
    if (chr > 127)
        return true;
    if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0)
        return false;
    return true;
}
/// <summary> 
/// 为非英文字符串编码 
/// </summary> 
/// <param name="chr"></param> 
/// <returns></returns> 
private string ToHexString(char chr)
{
    UTF8Encoding utf8 = new UTF8Encoding();
    byte[] encodedBytes = utf8.GetBytes(chr.ToString());
    StringBuilder builder = new StringBuilder();
    for (int index = 0; index < encodedBytes.Length; index++)
    {
        builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16));
    }
    return builder.ToString();
}

该松耦合的时候松耦合

该松耦合的时候松耦合

该紧耦合的时候紧耦合

没有绝对的好和坏。

现在才发现webform非常好,页面相关的,紧耦合(微软已经给做好了)。

业务方面松耦合,可以灵活变更,以免造成牵一发而动全身的情况。

而MVC正好相反了,页面拆成3份view+model+controller. 业务方面正好偏向是紧耦合的。

controller层不可能写过去复杂的业务逻辑。业务逻辑都要另分离出一层。

不好。

MVC的好处是:在技术层面上,把前端、程序员的职责分开了。

现在都是我自己搞,分开始在是没必要。

如果有团队,分开是非常好的。各专其业。

asp.net在cs文件向aspx输出html的时候避免html编码

可以使用HtmlString代替string. 如下函数:

public HtmlString CheckCurrentNav(string nav)
{
	nav = nav.ToLower();
	string currentPageName = Path.GetFileName(Request.Path).ToString();
	if (nav == currentPageName)
	{
		return new HtmlString("class='active_nav'");
	}
	else
	{
		return new HtmlString("");
	}
}