petshop4.0 Profile

四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果) 移位寄存器有哪些分类呢? 按移位方向分类:①单向移位寄存器(包括左移、右移)②双向移位寄存器 按循环方式分类:①循环移位寄存器②非循环移位寄存器 按部位的不同分类:①逻辑移位寄存器②算术移位寄存器 按输入输出方式分类:①串入串出②串入并出③并入串出④并入并出 阅读详情
 

对于Microsoft .net PetShop程序中的购物车和订单处理模块,文中主要分析两种技术的应用:

1. Profile技术在PetShop程序中用于三处:

1) 购物车ShoppingCart -下面的例子围绕购物车流程进行

2) 收藏WishList

3) 用户信息AccountInfo

注册新用户 NewUser.aspx :使用的是CreateUserWizard 控件,基于MemberShip机制,在数据库MSPetShop4Services的表aspnet_Users中创建用户

修改用户注册信息 UserProfile.aspx: 基于Profile技术,在数据库MSPetShop4Profile的表Profiles和Account中创建用户信息

2. 异步消息处理技术运用于订单处理

4.1 Web.config配置

Profile可以利用数据库存储关于用户的个性化信息,有点象session对象,但session对象是有生存期的,在生存期后,session对象自动失效了。而profile不同,除非显式移除它。要实现profile功能,必须先在web.config中进行定义。

在web.congfig中,将会定义一些属性/值,分别存贮将要保存的变量和值,比如language属性,定义其值是string类型,如此类推。而<group>标签,则是将一些相同或类似功能的变量值放在一起。

程序中使用方法:Profile.language = ddlLanguage.SelectedItem.Value;

<profile automaticSaveEnabled="false" defaultProvider="ShoppingCartProvider">

<providers>

<add name="ShoppingCartProvider" connectionStringName="SQLProfileConnString" type="PetShop.Profile.PetShopProfileProvider" applicationName=".NET Pet Shop 4.0"/>

<add name="WishListProvider" connectionStringName="SQLProfileConnString" type="PetShop.Profile.PetShopProfileProvider" applicationName=".NET Pet Shop 4.0"/>

<add name="AccountInfoProvider" connectionStringName="SQLProfileConnString" type="PetShop.Profile.PetShopProfileProvider" applicationName=".NET Pet Shop 4.0"/>

</providers>

<properties>

<add name="ShoppingCart" type="PetShop.BLL.Cart" allowAnonymous="true" provider="ShoppingCartProvider"/>

<add name="WishList" type="PetShop.BLL.Cart" allowAnonymous="true" provider="WishListProvider"/>

<add name="AccountInfo" type="PetShop.Model.AddressInfo" allowAnonymous="false" provider="AccountInfoProvider"/>

</properties>

</profile>

4.2 购物车程序流程-Profile技术

1. 点击“加入购物车”: http://localhost:2327/Web/ShoppingCart.aspx?addItem=EST-34

2. ShoppingCart.aspx文件处理:在init方法之前处理

protected void Page_PreInit(object sender, EventArgs e) {

if (!IsPostBack) {

string itemId = Request.QueryString["addItem"];

if (!string.IsNullOrEmpty(itemId)) {

Profile.ShoppingCart.Add(itemId); //注意ShoppingCart的类型是PetShop.BLL.Cart

//Save 方法将修改后的配置文件属性值写入到数据源,如ShoppingCart属性已经改变

Profile.Save();

// Redirect to prevent duplictations in the cart if user hits "Refresh"

//防止刷新造成 多次提交

Response.Redirect("~/ShoppingCart.aspx", true); //将客户端重定向到新的 URL。指定新的 URL 并指定当前页的执行是否应终止。

}

}

3. PetShop.BLL.Cart类

// Dictionary: key/value

private Dictionary<string, CartItemInfo> cartItems = new Dictionary<string, CartItemInfo>();

/// <summary>

/// Add an item to the cart.

/// When ItemId to be added has already existed, this method will update the quantity instead.

/// </summary>

/// <param name="itemId">Item Id of item to add</param>

public void Add(string itemId) {

CartItemInfo cartItem;

//获取与指定的键相关联的值TryGetValue(TKey key,out TValue value)

if (!cartItems.TryGetValue(itemId, out cartItem)) {

Item item = new Item();

ItemInfo data = item.GetItem(itemId);

if (data != null) {

CartItemInfo newItem = new CartItemInfo(itemId, data.ProductName, 1, (decimal)data.Price, data.Name, data.CategoryId, data.ProductId);

cartItems.Add(itemId, newItem);

}

}

else

cartItem.Quantity++;

}

4. 更新Profile

//Save 方法将修改后的配置文件属性值写入到数据源,如ShoppingCart属性已经改变

Profile.Save();

如何更新:

根据配置中的ShoppingCartProvider类型 PetShop.Profile.PetShopProfileProvider。

ASP.NET 配置文件提供对用户特定属性的持久性存储和检索。配置文件属性值和信息按照由 ProfileProvider 实现确定的方式存储在数据源中。

每个用户配置文件在数据库的 Profiles 表中进行唯一标识。该表包含配置文件信息,如应用程序名称和上次活动日期。

CREATE TABLE Profiles
(
  UniqueID AutoIncrement NOT NULL PRIMARY KEY,
  Username Text (255) NOT NULL,
  ApplicationName Text (255) NOT NULL,
  IsAnonymous YesNo, 
  LastActivityDate DateTime,
  LastUpdatedDate DateTime,
  CONSTRAINT PKProfiles UNIQUE (Username, ApplicationName)
)

5. PetShop.Profile. PetShopProfileProvider类, 继承自ProfileProvider

// 创建 PetShop.SQLProfileDAL.PetShopProfileProvider类-数据库操作

private static readonly IPetShopProfileProvider dal

= DataAccess.CreatePetShopProfileProvider();

/// <summary>

/// 设置指定的属性设置组的值

/// </summary>

public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection) {

string username = (string)context["UserName"];

CheckUserName(username);

bool isAuthenticated = (bool)context["IsAuthenticated"];

int uniqueID = dal.GetUniqueID(username, isAuthenticated, false, ApplicationName);

if(uniqueID == 0)

uniqueID = dal.CreateProfileForUser(username, isAuthenticated, ApplicationName);

foreach(SettingsPropertyValue pv in collection) {

if(pv.PropertyValue != null) {

switch(pv.Property.Name) {

case PROFILE_SHOPPINGCART: //ShoppingCart

SetCartItems(uniqueID, (Cart)pv.PropertyValue, true);

break;

case PROFILE_WISHLIST:

SetCartItems(uniqueID, (Cart)pv.PropertyValue, false);

break;

case PROFILE_ACCOUNT:

if(isAuthenticated)

SetAccountInfo(uniqueID, (AddressInfo)pv.PropertyValue);

break;

default:

throw new ApplicationException(ERR_INVALID_PARAMETER + " name.");

}

}

}

UpdateActivityDates(username, false);

}

// Update cart

private static void SetCartItems(int uniqueID, Cart cart, bool isShoppingCart) {

dal.SetCartItems(uniqueID, cart.CartItems, isShoppingCart);

}

6. PetShop.SQLProfileDAL. PetShopProfileProvider类

使用事务:包含两个sql动作,先删除,再插入

/// <summary>

/// Update shopping cart for current user

/// </summary>

/// <param name="uniqueID">User id</param>

/// <param name="cartItems">Collection of shopping cart items</param>

/// <param name="isShoppingCart">Shopping cart flag</param>

public void SetCartItems(int uniqueID, ICollection<CartItemInfo> cartItems, bool isShoppingCart) {

string sqlDelete = "DELETE FROM Cart WHERE UniqueID = @UniqueID AND IsShoppingCart = @IsShoppingCart;";

SqlParameter[] parms1 = {

new SqlParameter("@UniqueID", SqlDbType.Int),

new SqlParameter("@IsShoppingCart", SqlDbType.Bit)};

parms1[0].Value = uniqueID;

parms1[1].Value = isShoppingCart;

if (cartItems.Count > 0) {

// update cart using SqlTransaction

string sqlInsert = "INSERT INTO Cart (UniqueID, ItemId, Name, Type, Price, CategoryId, ProductId, IsShoppingCart, Quantity) VALUES (@UniqueID, @ItemId, @Name, @Type, @Price, @CategoryId, @ProductId, @IsShoppingCart, @Quantity);";

SqlParameter[] parms2 = {

new SqlParameter("@UniqueID", SqlDbType.Int),

new SqlParameter("@IsShoppingCart", SqlDbType.Bit),

new SqlParameter("@ItemId", SqlDbType.VarChar, 10),

new SqlParameter("@Name", SqlDbType.VarChar, 80),

new SqlParameter("@Type", SqlDbType.VarChar, 80),

new SqlParameter("@Price", SqlDbType.Decimal, 8),

new SqlParameter("@CategoryId", SqlDbType.VarChar, 10),

new SqlParameter("@ProductId", SqlDbType.VarChar, 10),

new SqlParameter("@Quantity", SqlDbType.Int)};

parms2[0].Value = uniqueID;

parms2[1].Value = isShoppingCart;

SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringProfile);

conn.Open();

SqlTransaction trans = conn.BeginTransaction(IsolationLevel.ReadCommitted);

try {

SqlHelper.ExecuteNonQuery(trans, CommandType.Text, sqlDelete, parms1);

foreach (CartItemInfo cartItem in cartItems) {

parms2[2].Value = cartItem.ItemId;

parms2[3].Value = cartItem.Name;

parms2[4].Value = cartItem.Type;

parms2[5].Value = cartItem.Price;

parms2[6].Value = cartItem.CategoryId;

parms2[7].Value = cartItem.ProductId;

parms2[8].Value = cartItem.Quantity;

SqlHelper.ExecuteNonQuery(trans, CommandType.Text, sqlInsert, parms2);

}

trans.Commit();

}

catch (Exception e) {

trans.Rollback();

throw new ApplicationException(e.Message);

}

finally {

conn.Close();

}

}

else

// delete cart

SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionStringProfile, CommandType.Text, sqlDelete, parms1);

}

shader多图叠加变换 shader Shader "Paint3D/AddTexture" { Properties { _MainTex ("Main Texture", 2D) = "white" {} _MainColor("Main Color", Color)=(1,1,1,1) _AddTex0 ("Texture0", 2D) = "white" {} _AddTex1 ("Texture1", 2D) = "white" {} . 阅读详情

相关推荐

智能体在车联网中的应用:第19天 智能体理论与初步实践 D30:阶段小结——在SUMO中使用TraCI控制预编程智能体

本文介绍了如何将强化学习从算法仿真迁移到交通系统实践,重点讲解了SUMO微观交通仿真平台与TraCI实时控制接口的架构。通过构建一个预编程驾驶智能体,演示了车辆从起点到目标点的导航控制。文章详细解析了TraCI的双向通信机制和事件驱动模型,对比了其与传统RL环境的差异,并提供了完整的Python实现框架,包括路网配置、车辆控制和基于向量场的导航逻辑。该实践为后续开发高级学习型交通智能体奠定了基础。

IT深耕十余载,大道之简 1478

Petshop4.0 超级详细介绍(三)

 Petshop4.0 超级详细介绍(三)      ShoppingCart.aspx中Profile提供的功能是针对用户的个性化服务。在ASP.NET 1.x版本时,我们可以利用Session、Cookie等方法来存储用户的状态信息。然而Session对象是具有生存期的,一旦生存期结束,该对象保留的值就会失效。Cookie将用户信息保存在客户端,它具有一定的安全隐患,一些重要的信息不能

sunchaohuang的专栏 1234

使用CubeMX生成的项目在Keil下添加DSP库并包含arm_math头文件后报错的解决办法

问题描述: 最近使用Cube生成工程后,在Keil中使用Manage Runtime Environment即绿色小饼干按钮添加CMSIS的DSP库后编译报错。很有意思的是,STM32论坛上有外国朋友报告的同样的错误,都是30个Errors,5个Warning。 问题分析: 参考国内论坛某帖子(具体想不起来了),认为因该是Cube复制了库后,Keil从原始Packs目录下引用DSP库导致和Cub...

qq_32256951的博客 7001

读 PetShop代码(Profile篇)

用于存储与用户有关的数据,维护应用程序状态。Profile对象提供一个创建强类型和持久化方式的会话状态的方法。 以Profile.ShoppingCart.Add(); Profile.Save(); 的执行流程为例 首先配置文件部分代码如下: Code <profileautomaticSaveEnabled="false"defaultProvider="Sh...

weixin_33827965的博客 192

图形化界面无限转圈?CentOS 7的SELinux避坑指南(附命令行修复实录)

本文详细解析了CentOS 7图形界面启动时无限转圈或卡在'starting switch root'的故障原因,主要与SELinux安全策略冲突有关。提供了三种修复方案:临时禁用SELinux、重装策略包和精细调整策略,并分享了长期维护建议,帮助用户平衡系统安全性与可用性。

potato的博客 798

Amesim基础篇-元件详解-流体库管路

Amesim基础篇-元件详解-流体库管路

2201_75375391的博客 4524

petshop4中profile的配置

ProfileAuthenticationOption 枚举 描述要搜索的用户配置文件的身份验证类型。 All 搜索所有配置文件。  Anonymous 仅搜索匿名配置文件。  Authenticated 仅搜索已验证身份的配置文件。web.config中profile的配置这个用来设置profile要用到的数据库              这里的name就是上面的defaultProvi

swort_177的专栏 1263

RK3588设备树调试实战:解决NPU不加载、USB3.0识别异常与DP显示问题

本文深入探讨了RK3588设备树调试中的三大典型问题:NPU不加载、USB3.0识别异常与DP显示问题。通过详细的问题定位步骤、关键设备树修改和调试技巧,帮助开发者快速解决硬件适配中的挑战,提升RK3588平台的开发效率。

weixin_30576827的博客 477

关于petshop4.0中profile的应用的一个疑惑

关于petshop4.0中profile的应用的一个疑惑 在4.0版本中有三个地方使用了 <profileautomaticSaveEnabled="false"defaultProvider="ShoppingCartProvider"> ...

118

PBR:双向反射分布函数(BRDF)介绍与Cook-Torrance模型的实现

PBR:双向反射分布函数(BRDF)介绍与Cook-Torrance模型的实现 BRDF简介 再介绍BRDF之前我们要引入渲染方程这个东西: 其中L表示辐射率,其公式为: 它表示了一个拥有辐射强度Φ的光源在单位面积A,单位立体角ω上的辐射出的总能量。 辐射率是辐射度量学上表示一个区域平面上光线总量的物理量,它受到入射光线与平面法线间的夹角θ的余弦值cosθ的影响:当直接...

小龙虾的博客 1万+

【Bug已解决】Failed to fetch version ECONNREFUSED 解决方案

方案适用场景推荐指数难度方案一:NODE_EXTRA_CA_CERTS代理/企业网关证书⭐⭐⭐⭐⭐低方案二:浏览器导出证书不知证书在哪⭐⭐⭐⭐中方案三:使用系统证书macOS 用户⭐⭐⭐⭐中方案四:关闭代理直连快速验证⭐⭐⭐低方案五:更新 Node.js证书列表过时⭐⭐⭐低方案六:同步系统时间时间偏差导致⭐⭐⭐低根本原因。

博客 9974

PetShop4.0知识点:用户配置文件 User Profile(1)

“用户配置文件”是User Profile这个词的直接翻译,其实没有文件的意思,默认存储在数据库中,不用自己管理文件。   Profile是针对每个帐户的数据存储,比如一个电子商务网站的用户购物车数据。 在ASP.NET 1.x版本时,我们可以利用Session、Cookie等方法来存储用户的状态信息。然而Session对象是具有生存期的,一旦生存期结束,该对象保留的值就会失效。Cookie将

140

SIMULINK开发项目实例 1000 例专栏之第912例--AC-DC整流器场景:基于PWM整流器拓扑结构的建模:三相电压型PWM整流器(SR)单位功率因数控制仿真

本文详细介绍了使用Simulink和Simscape Electrical搭建三相电压型PWM整流器(VSR)模型的方法。主要内容包括:系统结构设计、主电路拓扑搭建、单位功率因数控制算法实现(含PLL锁相环、dq变换、PI控制器等模块)、参数配置和仿真设置。通过仿真分析验证了该系统能实现输入电流与电压同相位、输出直流电压稳定等特性,体现了PWM整流器的高效性和低谐波优势。文章还提出了增强鲁棒性、多工况测试等优化建议,为电力电子系统设计提供了实用指导。该建模方法对新能源发电、电动汽车充电等领域具有重要意义。

xiaoheshang_123的博客 7797

PetShop4.0 工厂模式及Profile Provider实现

第一部份:工厂模式 一、项目名称及描述:(实现步骤为:4-3-6-5-2-1) 1、WEB=表示层 2、BLL=业务逻辑层 3、IDAL=数据访问层接口定义 4、Model=业务实体 5、DALFactory=数据层的抽象工厂(创建反射) 6、SQLServerDAL=SQLServer数据访问层 / oracleDAL=Oracle数据访问层 DBUtility 数据库访

waxiang767的专栏 404

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

petshop4.0 详解之七(PetShop表示层设计)

petshop4.0 详解之七(PetShop表示层设计)  6.4  ASP.NET 2.0新特性由于PetShop 4.0是基于.NET Framework 2.0平台开发的电子商务系统,因而它在表示层也引入了许多ASP.NET 2.0的新特性,例如MemberShip、Profile、Master Page、登录控件等特性。接下来,我将结合PetShop 4.0的设计分别介绍它们的实现。

学无止境的专栏 537

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

PetShop 4.0 详解之七

 PetShop 4.0 详解之七(PetShop表示层设计) 6.4  ASP.NET 2.0新特性由于PetShop 4.0是基于.NET Framework 2.0平台开发的电子商务系统,因而它在表示层也引入了许多ASP.NET 2.0的新特性,例如MemberShip、Profile、Master Page、登录控件等特性。接下来,我将结合PetShop 4.0的设计分

yuan0379的专栏 385

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

PetShop 4.0 详解之七(PetShop表示层设计)

6.4 ASP.NET 2.0新特性 由于PetShop 4.0是基于.NET Framework 2.0平台开发的电子商务系统,因而它在表示层也引入了许多ASP.NET 2.0的新特性,例如MemberShip、Profile、Master Page、登录控件等特性。接下来,我将结合PetShop 4.0的设计分别介绍它们的实现。 6.4.1 Profile特性 Profile提供的功...

weixin_30325071的博客 93
上一篇: ASP.NET 3.5核心编程学习笔记(9):用户配置文件
下一篇: Hardcoded string "下一步", should use @string resource警告
mywebstudy
博客等级 码龄15年 30粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值