使用ASP.NET进行网站开发的心得与解决

使⽤ASP.NET 进⾏⽹站开发的⼼得与解决
⽬录
总体代码结构
虽说好多零碎的⽂件没有整理,但是作为⼩型⽹站也够⽤了。
App_Code⽬录下主要存放数据库的操作类(.cs)并⽣成sql语句,传⼊Conn类中去执⾏,其他cs⽹页若想进⾏数据库的操作,需要实例化App_Code中的类进⾏⽣成sql语句并执⾏。
服务器控件相关问题
<asp:Button>运⾏时引发button组件必须包含在服务器控件中的问题
问题中缺少⼀个form标签,且标签需包含服务器标志。代码如下:
⽗模板(.master )相对地址引⽤的问题
我的模板都在根⽬录下⾯,因此img、link、a以及script的引⽤使⽤'./'就可以,⽽⽐如对购物车和宠物的管理在下⼀级⽬录下⾯,因此直接
引⽤⽗模板图⽚,script就⽆法引⽤(link标签可以,尚不清楚原理)。如图:
解决⽅案:在各种引⽤中加了服务器标志,代码运⾏时会⾃动按需将./改为../,详情参考
另外下图我是将数据库中的值改为 ./图⽚路径 ,通过前台直接遍历并设置img标签的src属性得来,1
<form runat="server">2
<asp:Button class="btn btn-warning" Text="⽴即购买"                    runat="server" OnClick="Buy_Click" />3</form>
姬诚
可是也随之⽽来了⼀个问题:下⼀级⽬录中图⽚⽆法显⽰(应加../),因此我想到了字符串拼接,附代码:
即petIcon字段使⽤了字符串拼接,图⽚可以正常显⽰。
cs 和aspx 之间的传值问题
cs到aspx的传值:
后台在全局变量范围⾥定义⼀个public类型的变量:
public DataTable pet;
前台显⽰这个变量要在<%%>⾥,或者对于普通类型变量(int,string)可直接<%=xxx%>:<%for(int i = 0;i<pet.Rows.Count;i++){ %>
aspx到cs之间的传值(a链接):
在a链接⾥通过?传值: 在⽬标页⾯的后台页⾯接收值:1
<%for(int i = 0;i<pet.Rows.Count;i++){ %>2
<%3
string petId = pet.Rows[i].ItemArray[0].ToString().Trim();4
string petName = pet.Rows[i].ItemArray[1].ToString().Trim();5
string petIcon = "."+pet.Rows[i].ItemArray[2].ToString().Trim();6
string petInfo = pet.Rows[i].ItemArray[3].ToString().Trim();7
string petSort = pet.Rows[i].ItemArray[4].ToString().Trim();8
%>9
<tr>10
<td><%=petName %></td>11
<td><%=petSort %></td>12
<td>13
微粒体<img src="<%=petIcon %>"" alt="Alternate Text" />14
</td>15
<td><%=petInfo %></td>16
<td><a href="./update.aspx?petId=<%=petId %>">修改</a> <a href="./delete.aspx?petId=<%=petId %>">删除</a></td>17            </tr>18<%} %>
保心包1
<td>2
<a href="./update.aspx?petId=<%=petId %>">修改</a> 3
<a href="./delete.aspx?petId=<%=petId %>">删除</a>4</td>
3        petId = Request.Params["petId"];
主:若需要传多值,则每个值之间⽤&隔开,修改Request.params[""]⾥的参数⼀致即可。
购物车总数问题
定义⼀个int型变量count,当前台每循环遍历⼀次时执⾏count += price(price是商品单价),最后输出count即可。
<%for(int i = 0;i<cart.Rows.Count;i++){ %>
<%
string petName = cart.Rows[i].ItemArray[1].ToString().Trim();
string petPrice = cart.Rows[i].ItemArray[2].ToString().Trim();
int price = Int32.Parse(petPrice);
目诊count += price;
%>
<%}%>
重复添加购物车问题
同⼀个⽤户,在将⼀件商品加⼊购物车后,应⽆法重复添加,当显⽰添加按钮时,遍历数据库cart表信息,进⾏判断。
点击后:
3
SelectDB se = new SelectDB();4
petId = Convert.ToInt32(Request.Params["petId"]); //从URL 中获取相应的值5
pet = se.SelectPetFromId(petId.ToString()); //查询数据库中的相应记录6
petPrice = pet.Rows[0].ItemArray[5].ToString().Trim();7
petName = pet.Rows[0].ItemArray[1].ToString().Trim();8
//查询所有petname ,并且检查是否有重样9
if(Session["username"] != null)10
{11
DataTable pets = se.SelectAllCartPetName();12
string username = Session["username"].ToString();13
for(int i =0; i < pets.Rows.Count; i++)14
{15
string name = pets.Rows[i].ItemArray[1].ToString().Trim();16
string Uname = pets.Rows[i].ItemArray[0].ToString().Trim();17
if(petName == name && username == Uname)18
{19
SubmitBtn.Text = "已加⼊";20
彭斯}21
}22
}23
24
}25
26
protected void Submit_Click(object sender, EventArgs e)27
{28
if(SubmitBtn.Text.ToString() == "已加⼊")29
{30
SubmitBtn.Text = "不要重复加⼊哦";31
}32
else if(Session["username"] == null)33
{34
Response.Write("<script type='text/javascript'>alert('必须先登录才能购买哦,请先登录');location.href='./index.aspx';</script>");35
}36
else 37
{38
流浪汉与天鹅CartEdit cart = new CartEdit();39
cart.Add(Session["username"].ToString(),petName,petPrice);40
Response.Write("<script type='text/javascript'>alert('加⼊购物车成功嗷,返回⾸页继续购物吧');location.href='./index.aspx';</script>");41        }42    }
管理员与普通⽤户的不同登录
⽤⼀个Users表,添加status字段,区分管理员和⽤户:
1protected void LoginButton_Click(object sender, EventArgs e)
2    {
3        LoginDB login = new LoginDB();
4        string username = this.NameInput.Value.ToString();
5        string pwd = this.PwdInput.Value.ToString();
6        if(username == "" || pwd == "")
7        {
8            Response.Write("<script type='text/javascript'>alert('⽤户名或密码可不能为空!');location.href='./adminIndex.aspx';</script>");
9        }
10        DataTable dt = login.GetUserPwd(username);
11        string dbPwd = dt.Rows[0].ItemArray[0].ToString().Trim();
12        string status = dt.Rows[0].ItemArray[1].ToString().Trim();
13        if(status == "⽤户"){
14            Response.Write("<script type='text/javascript'>alert('对不起,您尚⽆权限登录,请与管理员联系!');location.href='./index.aspx';</script>");
15        }
16        else if (pwd == dbPwd)
17        {
18            Session["username"] = username;
19            Response.Write("<script type='text/javascript'>alert('登录成功嗷!');location.href='./adminIndex.aspx';</script>");
20        }
21        else
22        {
23            Response.Write("<script type='text/javascript'>alert('⽤户名或密码错误!');location.href='./index.aspx';</script>");//重新加载页⾯,避免重复发送表单数
24        }
25    }
数据表(如cart表)⽆数据时引发空指针异常的问题
若数据查询不到,可返回(或⽤catch)⼀个数据集,前台遍历若为空就不遍历显⽰,即不会报错。
1public DataTable SelectAllPCartFromUsername(string username)
2    {
3        string sql = "select * from Cart where username='"+username+"'";
4        DataSet ds = conn.GetData(sql);
5        if(ds != null)
6        {
7            return ds.Tables[0];
8        }
9        else
10        {
11            return null;
12        }
13    }
若⽤户未登录:

本文发布于:2024-09-23 05:17:30,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/160843.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:问题   服务器   数据库   遍历   代码
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议