我有三个字段,用于启动搜索,其中任何两个都可以为空,但我需要检查以确保用户填写了一些内容。
所以,我有名字、姓氏和身份证号码。用户应该能够通过这些字段中的任何一个、两个或三个进行搜索,但是如果他们单击提交而不输入任何内容,我想捕获它。
我对 .NET 相当陌生,但据我所知,这意味着编写自定义验证。验证属性本身似乎还不够。
这是要走的路吗?如果是这样,或者如果其他方法更好,有人可以提供一些指导吗?
我有三个字段,用于启动搜索,其中任何两个都可以为空,但我需要检查以确保用户填写了一些内容。
所以,我有名字、姓氏和身份证号码。用户应该能够通过这些字段中的任何一个、两个或三个进行搜索,但是如果他们单击提交而不输入任何内容,我想捕获它。
我对 .NET 相当陌生,但据我所知,这意味着编写自定义验证。验证属性本身似乎还不够。
这是要走的路吗?如果是这样,或者如果其他方法更好,有人可以提供一些指导吗?
您可以在搜索模型上实现 IValidatableObject 接口。
例子:
public class SearchModel: IValidatableObject
{
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (string.IsNullOrWhitespace(Field1) && string.IsNullOrWhitespace(Field2) && string.IsNullOrWhitespace(Field3))
yield return new ValidationResult(("At least one field required.", new[] { "Field1", "Field2", "Field3" })
}
}
然后在你的控制器中:
[HttpPost]
public ActionResult Search(SearchModel searchModel)
{
if (ModelState.IsValid)
{
//Search
}
else
{
return View(searchModel);
}
}
那么在你看来:
@model SearchModel
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<div class="editor-label">
@Html.LabelFor(model => model.Field1)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Field1)
@Html.ValidationMessageFor(model => model.Field1)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Field2)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Field2)
@Html.ValidationMessageFor(model => model.Field2)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Field3)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Field3)
@Html.ValidationMessageFor(model => model.Field3)
</div>
<p>
<input type="submit" value="Search" />
</p>
</fieldset>
}
您基本上试图在提交之前验证字段是否有效,这是很有可能的。您可以构建自己的Event Handler
来处理对这些组件的更改,您可以Notifier
在按钮上处理一个。
有很多方法可以实现这样的壮举。让您熟悉概念概念的一种非常简单且基本的方法是Error Provider。
该组件可以在您的工具箱中找到,您只需将其拖到您的表单中即可。一旦它在那里,您可以对textbox
.
if(textbox1.text == String.EmptyOrNull)
{
errorProvider1.SetError(textbox1, "Please enter valid field.");
}
else
{
errorProvider1.Dispose();
MessageBox.Show(textbox1.text);
}
显然,这是一种基本方法,需要重构,但这应该可以完成您的任务,并让您更加熟悉 C# 及其实现。
希望这会有所帮助。
更新:
我没有看到一个字段可以为空或为空。但是您需要其他两个字段;您可以像往常一样简单地进行字段验证,但您希望连接这些结果。
你会想要使用&&
操作数。好像两个变量都为真;然后它将执行任务。哪里有||
遗嘱允许一个人是假的来验证。
if(textbox1.text == String.EmptyOrNull) &&
(textbox2.text == String.EmptyOrNull) &&
(textbox3.text == String.EmptyOrNull))
{
// One field is Null or Empty, do something.
}
正如我所说,这是一种基本方法。有更有效的方法来处理此类验证,但我会从简单的开始,因为您是 C# 和 Microsoft .Net 的新手。
另一种选择是使用Fluent Validation