2017-03-02 51 views
0

下午伙计们,显示一条消息,用户如果字段为空

我是新来的C#和IM试图创建一个if语句来检查两个字段的值,如果这两个领域都是空白,给再向用户显示消息。

我的两个领域是出生日期与日期时间的数据类型和年龄为int的数据类型。我使用studio 2013,并有一个C#mvc项目。

在我create.cshtml页我使用剃刀语法这两个表单域。

@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为的ActionResult创建。我已经尝试了几种方法来通过if语句获得这个工作,但我似乎得到了这个工作。

我已经使用string.IsNullOrEmpty方法试过了,但是因为这些日期时间和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:不能从转换'诠释?为“字串”

  2. 名称“MessageBox的”不存在于当前上下文3)关于“string.IsNullOrEmpty(字符串)”的 最好重载的方法匹配存在具有 一些无效参数

  3. 最好对于“string.IsNullOrEmpty(串)”重载的方法匹配具有 一些无效参数

另一种方式我试图得到这个工作在以下...

 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");   

我得到同样的问题的消息框,为出生日期以下申请。

  1. 运算符'=='不能应用于'System.DateTime?'类型的操作数。和'int'

我是新来的C#但认为我有点在正确的线条,我认为只需要一点帮助或任何建议。

问候 贝蒂

+0

'MessageBox'是窗体窗体(它在web应用程序中没有用)。添加一个'ModelState'错误并返回视图,以便消息显示在你的'@ Html.ValidationSummary()' - ModelState.AddModelError(“”,“你的错误信息”);返回查看(模型);' –

+0

并使您的属性可以为空 - 'int? AgeNotKnown'和'DateTime? DateOfBirth',以便用'if(DateOfBirth.HasValue)' –

+0

测试它们。但是,处理这个uis的正确方法是创建一个实现'IClientValidatable'的自定义验证属性,以便同时获得客户端和服务器端验证 - [完全指南在ASP.NET MVC 3验证 - 第2部分](http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2 ) –

回答

0

?意味着nullable其默认值将是null如果我使用int? i TS默认值将是null如果我使用int其默认值将是0

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

@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,那么它将返回到相同的视图,包括在视图中定义的keyvalidation的验证消息。

0

所有MessageBox类的首先是属于Windows窗体。如果你想要用户,你应该使用验证。我喜欢jquery validation

要添加控制这个样子,只是把一个断点到您的代码,并期待希望数据从表单来的。这样你可以决定你想如何控制你的数据。

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

0

首先创建视图模型对这种验证

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(); 
} 
相关问题