我在VS 2010中玩MVC2,我真的很喜欢它。在我从头开始的沙箱应用程序中,我的数据库在ADO.NET实体数据模型中表示,并使用Scott Guthrie的“伙伴类”方法对我的数据模型中的字段进行了大量验证,该方法运行良好
但是,在我设计并正在尝试的用户注册表单中,我想添加“确认电子邮件地址”或“确认密码”字段。由于这些字段显然不存在于我的数据模型中,我如何验证客户端和服务器端的这些字段?
我想实现类似'Html.ValidationMessageFor'的东西,但这些字段在数据模型中不存在。任何帮助将不胜感激。
答案 0 :(得分:4)
我使用视图模型。在视图模型有效之前,我不会创建要保留的数据模型实例。 下面是一个简单的例子。请注意,某些属性是数据模型,但验证属性仅存在于此视图模型上。(此处的基础不相关)
public class ProblemAddToDepartmentProductView : ViewModel
{
public Problem Problem { get; set; }
public IList<Product> AllProducts { get; set; }
public IList<Department> AllDepartments { get; set; }
public string ProblemId { get; set; }
public string ProblemName { get; set; }
[DisplayName("Choose the product:")]
[Required(ErrorMessage = "Select the Product.")]
public string SelectedProduct { get; set; }
public SelectList GetProducts()
{
var selectList = new SelectList(AllProducts, "Id", "Name");
return selectList;
}
[DisplayName("Choose the department using this problem for that product:")]
[Required(ErrorMessage = "Select the Department.")]
public string SelectedDepartment { get; set; }
public SelectList GetDepartments()
{
var selectList = new SelectList(AllDepartments, "Id", "Name");
return selectList;
}
internal class ProductSelect
{
public Guid Id { get; set; }
public string Name { get; set; }
}
}
它也有助于在页面上看到它:
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%= Html.LabelFor(x => x.SelectedProduct) %>
</div>
<div class="editor-field">
<%= Html.DropDownListFor(x => x.SelectedProduct, Model.GetProducts(),"--Select One--") %>
<%= Html.ValidationMessageFor(x => x.SelectedProduct)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(x => x.SelectedDepartment) %>
</div>
<div class="editor-field">
<%= Html.DropDownListFor(x => x.SelectedDepartment, Model.GetDepartments(),"--Select One--") %>
<%= Html.ValidationMessageFor(x => x.SelectedDepartment)%>
</div>
<p>
<input type="submit" value="Add Selected" />
</p>
</fieldset>
我也是这样做的,因此如果验证失败,模型将具有这些值,以便为下拉列表提取所需的数据:
p.ProblemId)%&gt;&lt;%= Html.HiddenFor(p =&gt; p.ProblemName)%&gt;
答案 1 :(得分:1)
<强>客户端:强>
并/或强>
服务器端:
FormCollection
) - 或 您可以为Model
添加两个字符串属性。这样做可以让您在Controller
中填充模型的实例,并在Model
/ s中进行相应的验证......