如果字段为空,则向用户显示消息

时间:2017-03-02 11:28:19

标签: c# asp.net-mvc asp.net-mvc-4 razor

Afternoon Folks,

我是c#的新手,我试图创建一个if语句来检查两个字段的值,如果这两个字段都是空白的,那么就会向用户显示一条消息。

我的两个字段是DateofBirth,数据类型为DateTime,Age的数据类型为int。我正在使用2013年的工作室并拥有一个c#mvc项目。

在我的create.cshtml页面中,我对这两个表单字段使用razor语法。

@Html.EditorFor(model => model.client.DateOfBirth, new { htmlAttributes = new { @class = "form-control", @placeholder = "dd-mm-yyyy" } })

@Html.EditorFor(model => model.client.AgeNotKnown, new { htmlAttributes = new { @class = "form-control", @placeholder = "Age in Years" } })

用户在提交表单时需要填写一个或另一个字段。

在我的控制器和我的HttpPost for ActionResult Create中。我已经尝试了几种方法来通过if语句使其工作,但我似乎得到了这个。

我尝试使用string.IsNullOrEmpty方法,但由于这些是DateTime和int数据类型,因此无效。见下面的示例。

 if (string.IsNullOrEmpty(clientViewRecord.client.AgeNotKnown));              
            {
                MessageBox.Show("please an Age if DOB not known");
            }

 db.ClientRecords.Add(clientViewRecord.client);
                db.SaveChanges();
                return RedirectToAction("MainMenu", "Home");

我在这里得到三个错误:

  1. 参数1:无法转换为' int?'到'字符串'

  2. 名称' MessageBox'在当前的背景下不存在3) 最佳重载方法匹配' string.IsNullOrEmpty(string)'具有 一些无效的论点

  3. 最好的重载方法匹配' string.IsNullOrEmpty(string)'具有 一些无效的论点

  4. 我试图让这个工作的另一种方式是以下......

         if (clientViewRecord.client.AgeNotKnown == 0 || clientViewRecord.client.DateOfBirth == 0);              
                {
                    MessageBox.Show("please enter an Age or if DOB");
                }
    
                db.ClientRecords.Add(clientViewRecord.client);
                db.SaveChanges();
                return RedirectToAction("MainMenu", "Home");         
    

    我的消息框和DateofBirth提交的内容都有同样的问题。

    1. 运营商' =='不能应用于类型' System.DateTime?'的操作数?和' int'
    2. 我是c#的新手,但我认为我有点正确,我认为只需要一些帮助或任何建议。

      此致 贝蒂

3 个答案:

答案 0 :(得分:0)

首先,MessageBox类属于windows窗体。如果您想让用户感到满意,您应该使用验证。我更喜欢jquery validation

要添加这样的控件,只需在代码中添加一个断点,然后查看来自表单的想要数据。这样您就可以决定如何控制数据。

System.DateTime的?和int?,这个问号告诉你这些变量可以为null。所以你应该在比较时考虑这一点。

答案 1 :(得分:0)

首先为这种验证创建ViewModel

public class ClientViewModel
{
    [Required, DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
    public DateTime Date { get; set; }

    [Required]
    public int Age { get; set; }
}

在视图中

@model  Models.ClientViewModel @*reference to your model usally create in Models folder*@

@Html.ValidationSummary() @* add this for validation summary displays here.*@

@Html.EditorFor(model => model.Date, new { htmlAttributes = new { @class = "form-control", @placeholder = "dd-mm-yyyy" } })
@Html.ValidationMessageFor(m => m.Date)

@Html.EditorFor(model => model.Age, new { htmlAttributes = new { @class = "form-control", @placeholder = "Age in Years" } })
@Html.ValidationMessageFor(m => m.Age)

@* Add jqueryval bundles which is created in app_start/BundleConfig  *@
@section Scripts{
    @Scripts.Render("~/bundles/jqueryval")
    }

在控制器

//Change the name of PostMethod 
public ActionResult PostMethod(Models.ClientViewModel model )
{
    if (ModelState.IsValid)
    {
        // do your stuff
    }


    return View();
}

答案 2 :(得分:0)

?表示nullable,如果我使用null,其默认值为int?,如果我使用null,则默认值为int其默认值为0

关于验证您可以ModelState使用MVC进行验证并添加自定义验证

    @Html.ValidationMessage("validation")
    @Html.EditorFor(model => model.DateOfBirth, new { htmlAttributes = new { @class = "form-control", @placeholder = "dd-mm-yyyy" } })
    @Html.EditorFor(model => model.AgeNotKnown, new { htmlAttributes = new { @class = "form-control", @placeholder = "Age in Years" } })

我使用了@Html.ValidationMessage("validation"),如果我在action

中退回任何内容,则会显示验证消息
 if (cls.DateOfBirth == null && cls.AgeNotKnown == null)
            {
                ModelState.AddModelError("validation","Please select one");
                return View();
            }

在行动中,如果两者都是null,它将检查条件,然后它将返回到相同的视图,包括视图中定义的key validation的验证消息。