如何验证拆分为几个 html 文本框的字符串模型 属性?

How to validate string model property splitted in a few html text boxes?

我在数据库中有一个 table,它有 1 个 GUID 列。它作为简单字符串映射到实体 属性:

[Required]
public string Code {get;set;}

我希望客户端将此 属性 视为 4 个文本框?他们每个人都包含一部分:

Code.Split(new[] {"-"}, StringSplitOptions.None)

如果孔值将显示在 1 html 文本框中,我知道如何通过 RegularExpressinAttribute 验证此 属性。但我希望它在向用户显示之前解析为 4 个部分,并在用户编辑这些文本框后组合在一起。那么,请问您能否帮助我如何在服务器和客户端上进行验证。谢谢!

您应该为您的视图创建一个具有四个独立属性的视图模型

public class CreateCodeVm
{
  [Required]
  public string CodePart1 { set;get;}

  [Required]
  public string CodePart2 { set;get;}

  [Required]
  public string CodePart3 { set;get;}

  [Required]
  public string CodePart4 { set;get;}
}

您将使用此视图模型在视图和操作方法之间传输数据。一旦您读取了您的操作方法中的值,您就可以使用它来保存到您的数据库中,您可以在其中使用您的 ORM 创建的实体 class。

当您必须向用户显示此内容时,请阅读 Guid 并将其转换为字符串然后拆分。

public ActionResult Edit(int id)
{
  var vm = new CreateCodeVm();
  var guidVariable = GetGuidFromYourDataBaseSomeHave();
  var parts = guidVariable.ToString().Split('-');
  vm.CodePart1 = parts[0];
  vm.CodePart2 = parts[1];
  vm.CodePart3 = parts[2];
  vm.CodePart4 = parts[3];

  return View(vm);
}

在你看来

@model CreateCodeVm
@using(Html.BeginForm())
{
  @Html.TextBoxFor(s=>s.CodePart1)
  @Html.ValidationMessageFor(s=>s.CodePart1)

  @Html.TextBoxFor(s=>s.CodePart2)
  @Html.ValidationMessageFor(s=>s.CodePart2)

   @Html.TextBoxFor(s=>s.CodePart3)
  @Html.ValidationMessageFor(s=>s.CodePart3)

  @Html.TextBoxFor(s=>s.CodePart4)
  @Html.ValidationMessageFor(s=>s.CodePart4)
  <input type="submit" />
}

并且在您的 HttpPost 操作中,您可以检查验证错误

[HttpPost]
public ActionResult Edit(CreateCodeVm model)
{
  if(ModelState.IsValid)
  {
     //save and return(redirect result) something
  } 
  return View(model);
}

虽然这将解决您验证 4 个单独字符串的问题,但它可能会带来另一个问题。如果您的 2 个用户为所有四个部分输入相同的值怎么办?您将从中生成相同的 Guid ?如果您的数据库列是 uniqueidentifier 类型,它可能会给您带来问题。