我在数据库中有一个表,其中有一个GUID列。它作为简单的字符串属性映射到实体:
.idea/
我希望客户端将此属性视为4个文本框?它们中的每一个都包含以下部分:
[Required]
public string Code {get;set;}
如果在1 html文本框中显示孔值,我知道如何通过Code.Split(new[] {"-"}, StringSplitOptions.None)
验证此属性。但我希望它在显示给用户之前解析为4个部分,并在用户编辑这些文本框后组合在一起。那么请你帮助我如何在服务器和客户端上进行验证。谢谢!
答案 0 :(得分:0)
您应该为视图创建一个具有四个单独属性的视图模型
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;}
}
您将使用此视图模型在视图和操作方法之间传输数据。一旦读取了action方法中的值,就可以使用它来保存到db中,在那里可以使用ORM创建的Entity类。
当您必须向用户显示此内容时,请阅读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吗?如果db列的类型为uniqueidentifier,则可能会导致问题。