我试图制作一个注册表单,如果用户没有填写所有文本框输入,则会返回错误消息。
我现在拥有的是
@using (Html.BeginForm("Register", "Main", FormMethod.Post))
{
@Html.TextBoxFor(r => r.FirstName)
@Html.TextBoxFor(r => r.LastName)
@Html.PasswordFor(r => r.Password)
@Html.PasswordFor(r => r.Password2)
@Html.TextBoxFor(r => r.Email)
@Html.TextBoxFor(r => r.Phone)
<input type="submit" value="Continue"/>
}
这些是我想要检查的字段是否为空或
在我的控制器中,我已经做了一个if语句来检查电子邮件是否已经被使用并且它返回了一条错误消息但是我不想为每个字段创建一个if语句,这不是听起来不错。
[HttpPost]
public ActionResult Register(Registration signingUp)
{
var db = new SolutiondbEntities();
var FindEmail = db.tblProfiles.FirstOrDefault(e => e.PROF_Email == signingUp.Email);
if (FindEmail == null)
{
var Data = db.tblProfiles.Create();
Data.PROF_FirstName = signingUp.FirstName;
Data.PROF_LastName = signingUp.LastName;
Data.PROF_Password = signingUp.Password;
Data.PROF_Email = signingUp.Email;
Data.PROF_CellNum = signingUp.Phone;
db.tblProfiles.Add(Data);
int Saved = db.SaveChanges();
if (Saved != 0)
{
Response.Write("Saved");
}
else
{
Response.Write("Something went wrong!");
}
}
else
{
Response.Write("Theres already an user with that Email");
}
return View();
}
我想知道如何检查表单上的每个字段是否为空,这样我就会返回一个错误,告诉用户填写所有空格或字段。
谢谢!
编辑:
这是我模特中的内容
public class Registration
{
public string FirstName { get; set; }
public string LastName { get; set; }
[DataType(DataType.Password)]
public string Password { get; set; }
public string Password2 { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
}
EDIT2:
我添加了这行代码,它似乎有效,但不准确,因为如果任何字段不为空,它将继续注册
foreach (string key in Request.Form.Keys)
{
if (Request.Form[key] == "")
{
Response.Write("Please, fill in all the fields");
}
else
{
Response.Write("Thanks for registering.");
}
return View();
}
如果我不在任何字段中放置任何内容,只要我放置任何内容(甚至是空格),它就会继续运行。
答案 0 :(得分:3)
您可以使用Data Annotations完成所有操作。首先,我想提醒必须在服务器端和客户端进行验证。如果您只在服务器上执行此操作,那么您只需知道模型错误(这将消耗时间和带宽)。如果您只在客户端上执行此操作,那么您将对恶意帖子开放,或者您因为JavaScript被禁用而无法检测到验证错误。
怎么做?让我们首先选择您的模型并添加适当的注释:
public class Registration
{
[Required] public string FirstName { get; set; }
[Required] public string LastName { get; set; }
[DataType(DataType.Password), Required] public string Password { get; set; }
[Required] public string Password2 { get; set; }
[Required] public string Email { get; set; }
[Required] public string Phone { get; set; }
}
请注意,您可能/应该添加所有可能的验证(密码匹配,电子邮件和电话号码正则表达式)。使用适当的注释(请参阅第一个链接)将允许您拥有更好的验证规则(例如FirstName
必须至少有两个非空白字符,电子邮件必须是有效地址,依此类推)。让我们看一个简单的示例(让我们检查MSDN有关各个属性的更多详细信息和更好的用法):
public class Registration
{
[Required, MinLength(2)]
public string FirstName { get; set; }
[Required, MinLength(2)]
public string LastName { get; set; }
[DataType(DataType.Password), Required]
public string Password { get; set; }
[Required, Compare("Password")]
public string Password2 { get; set; }
[Required, EMailAddress]
public string Email { get; set; }
[Required, Phone]
public string Phone { get; set; }
}
如果您确实启用了不显眼的JavaScript(以及所需的HTML代码),那么您只需要进行客户端验证。
服务器端更容易,因为模型绑定器会为您完成所有操作,您只需要check if model is valid或不需要:
[HttpPost]
public ActionResult Register(Registration signingUp)
{
if (!ModelState.IsValid)
return View(signingUp);
// Model is valid, work with it...
}
请注意,您(严格)不需要检查模型是否有效,如果您的数据库中有相同的约束,那么在尝试插入新记录时它会抛出异常。用户将返回一个不太有意义的(从他的角度来看)错误消息,所以我建议总是做这个检查。