【问题标题】:Verify if input textbox is empty or null c#验证输入文本框是否为空或 null c#
【发布时间】:2014-05-27 13:32:42
【问题描述】:

我正在尝试制作一个注册表单,如果用户没有填写所有文本框输入,它会返回错误消息。

我现在拥有的是

@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();
        }

如果我不在任何字段中输入任何内容,这将有效,只要我输入任何内容(甚至是空格),它就会继续..

【问题讨论】:

  • 在您的模型 (Registration) 上使用数据注释(在本例中为 RequiredAttribute),框架会为您执行此操作(通过客户端验证)。
  • @AdrianoRepetti 你能给我举个例子吗,我已经编辑了问题并添加了我的模型,我是 c# 的新手
  • 当您说 [DataType(DataType.Password)] 时,您所拥有的是数据注释。您可以为每个需要的字段添加 [Required()] 数据注释(即不能为 null 或空字符串)。
  • @AnneSchuessler 即使将 [Required(ErrorMessage="Error")] 添加到模型中每个公共字符串的顶部,我仍然能够继续注册。我必须在控制器中添加其他任何东西吗?我是 C# 新手,还在学习初学者的东西
  • 确保你先用javascript检查这些东西(那里有很多例子)。它可以节省您在每次用户尝试输入输入时将数据发送到服务器并返回,从而使您的服务器上的事情变得更快、更容易。

标签: c# asp.net asp.net-mvc forms


【解决方案1】:

您可以使用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 the model is valid 或不:

[HttpPost]
public ActionResult Register(Registration signingUp)
{
    if (!ModelState.IsValid)
        return View(signingUp);

    // Model is valid, work with it... 
}

请注意,您不需要(严格)检查模型是否有效,如果您的数据库中有相同的约束,那么在尝试插入新记录时它会抛出异常。用户将收到一条意义不大(从他的角度来看)的错误消息,因此我建议始终进行此检查。

【讨论】:

  • 天啊,你是救命稻草,我希望我能投票给你,但我需要声望之类的。非常感谢先生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
相关资源
最近更新 更多