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:无法转换为' int?'到'字符串'
名称' MessageBox'在当前的背景下不存在3) 最佳重载方法匹配' string.IsNullOrEmpty(string)'具有 一些无效的论点
最好的重载方法匹配' string.IsNullOrEmpty(string)'具有 一些无效的论点
我试图让这个工作的另一种方式是以下......
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提交的内容都有同样的问题。
我是c#的新手,但我认为我有点正确,我认为只需要一些帮助或任何建议。
此致 贝蒂
答案 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
的验证消息。