检查request.form [“field”]字符串长度在ASP.net中不起作用

时间:2011-04-12 21:49:33

标签: c# asp.net

我目前正在尝试验证我的ASP.NET表单。我需要确保用户输入的密码至少为5个字符。

我已经使用以下代码进行了检查以确保某些内容有效:

else if (Request.Form["txtPassword"] == "")
{}

然后我使用以下代码检查字符是否不小于5:

if (Request.Form["txtPassword"].Length < 5)
{}

但是,当我运行表单并提交它时,我不断向用户显示有关密码长度的错误,而是继续从Visual Studio收到错误。在我尝试提交表单之前,它会显示:

  

对象引用未设置为对象的实例。

只有当我检查字符串是否为空时,才会显示此错误。

感谢您提供的任何帮助。

5 个答案:

答案 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”]将起作用。