我目前正在尝试验证我的ASP.NET表单。我需要确保用户输入的密码至少为5个字符。
我已经使用以下代码进行了检查以确保某些内容有效:
else if (Request.Form["txtPassword"] == "")
{}
然后我使用以下代码检查字符是否不小于5:
if (Request.Form["txtPassword"].Length < 5)
{}
但是,当我运行表单并提交它时,我不断向用户显示有关密码长度的错误,而是继续从Visual Studio收到错误。在我尝试提交表单之前,它会显示:
对象引用未设置为对象的实例。
只有当我检查字符串是否为空时,才会显示此错误。
感谢您提供的任何帮助。
答案 0 :(得分:5)
您有一个空引用异常。 Request.Form [“txtPassword”]返回null。这是最重要的事情:
string myString = null;
// This is valid comparison because myString is a string object.
// However, the string is not *empty*, it is null, thus it has *no* value.
if(myString == "")
{
DoSomething();
}
// This is not acceptable, as null.Length has no meaning whatsoever.
// The expression compiles because the variable is of type string,
// However, the string is null, so the "Length" property cannot be called.
if(myString.Length < 5)
{
DoSomethingElse();
}
您无法访问空字符串的长度。请尝试使用此代码:
var myString = Request.Form["txtPassword"];
if(!String.IsNullOrEmpty(myString) && myString.Length < 5)
{
DoSomething();
}
然而,下一个问题是为什么它是空的?也许您将关联的表单输入错误地命名为“txtPassword”以外的其他内容,或者可能没有通过POST发送数据。
答案 1 :(得分:1)
这可能意味着Request.Form["txtPassword"]
为空。我会先检查它是否存在。
答案 2 :(得分:0)
您收到该错误,因为您在null对象上调用Length属性,在这种情况下,Request.Form [“txtPassword”]为null,无法调用Length。
您可能希望确保您的文本框具有ID“txtPassword”,请记住.net 4之前的asp.net会生成“ctl00_txtPassword”等客户端ID,并且会成为Form字段,您可能需要输入Request.Form [“ctl00_txtPassword” “]。
答案 3 :(得分:0)
我有类似的问题。我试图从一个项目发布到另一个项目。由于要求,我使用常规HTML表单。值始终为null。我用这个把头撞到了墙上,直到我偶然发现了解决方案。
1st:NO runat =&#34; server&#34;表单标题中的标记
bad: <form id="form1" runat="server" action="http://yoursite.com/yourpage.aspx" method="post" >
good: <form id="form1" action="http://yoursite.com/yourpage.aspx" method="post" >
第二
.Net的html输入框是
.Net HTML标记:<input id="myinput" type="text" />
结束标记/&gt;是问题。如果删除/它将起作用。
bad: <input id="myinput" type="text" />
good: <input name="myinput" type="text" >
第3名:请务必使用&#34;名称&#34;属性而不是&#34; id&#34;属性
bad: <input id="myinput" type="text" />
good: <input name="myinput" type="text" >
答案 4 :(得分:0)
如果表格标签放在母版页中,例如:Site.Master,您提交的表格包含字段
&LT; asp:TextBox ID =“amount”name =“amount”runat =“server”/&gt;
并且实际上是在ContentPlaceHolder(ID =“MainContent”)中,然后如果你使用Request.Form [“amount”]它不起作用并且总是在其中显示空值...因为,当页面是呈现,id实际上变成“ctl00 $ MainContent $ amount”。因此,Request.Form [“ctl00 $ MainContent $ amount”]将起作用。