输入字符串的格式不正确 .net
1、首先打开vs2017。
2、新添加一个项目。
3、选择一个类库。
4、就在这个cs类中写,方法的目的就是给所有的字符串后边添加@符号。
5、先创建方法名词,这里就起名addChars。
6、填充里面的方法,并重新改造一下,将方法改为静态public static string addChars(this string str){return str + "@";}。
7、新建一个aspnet网站,将创建好的扩展方法引入。
8、下面开始写测试代码,创建2个label出来。
9、最后后台调用扩展方法,看结果就完成了。
//删掉
ResponseWrite("<meta http-equiv=Content-Type content=\"text/html; charset=GB2312\">");
//加上这句
HttpContextCurrentResponseContentType ="application/ms-excel";
ASPNET WEB程序的先是生成一个DLL文件,然后用IIS动态加载这个DLL文件,利用提供的接口处理方法和事务,那么在运行时就需要把DLL复制到程序集的缓存目录中,c:\WINDOWS\MicrosoftNET\Framework\v2050727\Temporary ASPNET Files\root\ff8572ba\92e305f7这个就是你的这个WEB程序的缓存文件夹
可能是安全软件(杀毒软件,防火墙等)拦截,因为这个文件夹是在WINDOWS目录中,很多安全软件都会拦截写入操作,因此会出现这个异常,尝试关闭安全软件
不在前台写ConnectionString和SelectCommand的值,
在后台的PageLoad事件来进行赋值
如
public PageLoad(object sender,EnentArg e)
{
string ConStr="";
SqlDataSource1ConnectionString=ConStr;
SqlDataSource1SelectCommand="";
}
这样不就好了吗,在那里面你还可以对连接字符串进行不同的赋值
还有问题QQ252989674
先分析原因。
你出现这个错误是因为你没有了解ASPNET的工作原理。ASPNet 和php,jsp ,asp等服务器语言一样 都是为了生成可供浏览器解析的页面,而可供浏览器解析的语言只有HTML。
1,如果你在aspx页面中插入一个asp:LinkButton 那么运行页面后 在浏览器中查看源代码你会发现这个标签实际被转为了一个<a>标签。
2,为什么你的写法不会转换呢?因为首先 传递给Literal1Text 的值在aspnet中作为一段字符串被直接输出到浏览器中。那么你的写法到浏览器后源代码中仍然是一个asp:LinkButton 标签,而这个标签是无法被浏览器正确解析的。
解决办法:
知道了原因,那么如果非要按照你的写法去写,那么应该是这样的:
Literal1Text = "<li>" + ((users)Session["users"])NameToString() + "</li><li> </li><li><a ID='LinkButton1' onclick='LinkButton1_Click1'>注销</a></li><li> </li><li>信息修改</li><li> </li>";
但是当你修改完后发现点击注销按钮依然不能执行!为什么呢?
因为你的LinkButton1_Click1 事件并没有在aspnet中被解析为可供浏览器识别的js代码。
如何解决?
在aspx页面中写一个asp:LinkButton按钮:
<asp:LinkButton ID='LinkButton2' runat='server' onclick='LinkButton1_Click1'>注销</asp:LinkButton>
运行页面,查看源代码 看看这个新加的注销按钮被解析为了什么html代码,大概如下
<a id="LinkButton2" onclick="xxxxx"></a>
将新加的linkbutton 设置不可见属性
<asp:LinkButton ID='LinkButton2' runat='server' visible="false" onclick='LinkButton1_Click1'>注销</asp:LinkButton>
重新修改后台代码
Literal1Text = "<li>" + ((users)Session["users"])NameToString() + "</li><li> </li><li><a ID='LinkButton1' onclick='xxxxx'>注销</a></li><li> </li><li>信息修改</li><li> </li>";
//也就是将标签的js事件绑定到那个隐藏的注销按钮事件上。
希望对你有帮助
要进行MD5加密的字符串不含中文时,那么ASPNET的加密结果和ASP是一致的: ResponseWrite(FormsAuthenticationHashPasswordForStoringInConfigFile("wwwmzwucom", "MD5"));
//结果:D66E1F138689B9B5AA4C520D9EAFFB61
ResponseWrite(MD5("wwwmzwucom",32))
'结果:d66e1f138689b9b5aa4c520d9eaffb61
当要进行MD5加密的字符串含中文时,两者的加密结果就不一致了:ResponseWrite(FormsAuthenticationHashPasswordForStoringInConfigFile("木子屋", "MD5"));
//结果:34D9CBD5164C47058DFA3AF832E2D1DC ResponseWrite(MD5("木子屋",32))
'结果:0a40a90190da023ae7aa17771663a41e 我们知道,ASPNET默认使用 utf-8编码格式,而ASP使用的是gb2312编码格式,正是由于这编码格式不同,才导致了两者对中文加密结果的不同。下边我们看看怎么让 ASPNET的编码结果和ASP一样,那也就意味着要让ASPNET采用gb2312编码格式,这点 FormsAuthenticationHashPasswordForStoringInConfigFile()方法是办不到的,我们得使用 SystemSecurityCryptographyMD5CryptoServiceProvider对象的ComputeHash方法来进行 加密:MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
ResponseWrite(BitConverterToString(MD5ComputeHash(EncodingGetEncoding("gb2312")GetBytes("木子屋")))Replace("-", ""));
//结果:0A40A90190DA023AE7AA17771663A41E
若要再使用utf-8加密也非常容易:MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
ResponseWrite(BitConverterToString(MD5ComputeHash(EncodingGetEncoding("utf-8")GetBytes("木子屋")))Replace("-", ""));
//结果:34D9CBD5164C47058DFA3AF832E2D1DC 问题似乎是比较完美的解决了,我们再 来完善一下:当要加密的字符串是从其他页面传进来时,其他页面采用的编码格式可能是gb2312,可能是utf-8,还可能是其他的编码格式,怎么解决 呢?你可能会觉得很简单啊,使用它先前的编码格式进行加密不就行了?实际测试中你会发现两个很严重的问题:1 我们无从知道参数传过来时是使用什么编码格式;
2 如果两个页面使用的编码方式不一样,那么Request接收到的参数值会乱码,那就不要谈加密了;问题1比较好解决,要求对方传参数的同时必须多加一个参数说明采用的编码格式,问题2的解决方法是不使用Request直接接收参数值,废话不多说了,看下边的函数:
///// <summary>
/// 对字符串进行MD5加密
/// </summary>
/// <param name="text">要加密的字符串</param>
/// <param name="charset">字符串编码格式</param>
/// <example>str = MD5("木子屋","gb2312");</example>
/// <returns></returns>
public string MD5(string text, string charset)
{
return (MD5(text, charset, false));
}
///// <summary>
/// 对字符串或参数值进行MD5加密
/// </summary>
/// <param name="text">要加密的字符串或参数名称</param>
/// <param name="charset">字符串编码格式</param>
/// <param name="isArg">加密字符串类型 true:参数值 false:字符串</param>
/// <returns></returns>
public string MD5(string text, string charset, bool isArg)
{
try
{
MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
if (isArg)
{
NameValueCollection Collect = HttpUtilityParseQueryString(RequestUrlQuery, EncodingGetEncoding(charset));//使用Collect接收参数值
if (Collect[text] != null)
{
return BitConverterToString(MD5ComputeHash(EncodingGetEncoding(charset)GetBytes(Collect[text]ToString())))Replace("-", "");
}
}
else
{
return BitConverterToString(MD5ComputeHash(EncodingGetEncoding(charset)GetBytes(text)))Replace("-", "");
}
}
catch { }
return stringEmpty;
}
说明1:上边代码需要引入的命名空间using SystemText;
using SystemWebSecurity;
using SystemSecurityCryptography;
using SystemCollectionsSpecialized;说明2:32位密文如何转化成16位?16位密文是32位密文的9到24位字符。如:"0a40a90190da023ae7aa17771663a41e"→"90da023ae7aa1777"
关掉 VS 和 IE, 然后将
c:\WINDOWS\MicrosoftNET\Framework\v2050727\Temporary ASPNET Files\root\
下的内容全部删除,
然后重新编译你的项目
0条评论