考虑用户可以创建销售广告(帖子模型)。但每个广告都有不同的属性取决于其集团。属性不确定,可以由管理员添加不同的约束(必需.MinLength等)
我定义了一个这样的类:
public class Property
{
public int Id { get; set; }
public int Priority { get; set; }
[Required()]
public InputType Type { get; set; }
[Required()]
[MaxLength(150)]
public string Title { get; set; }
[Index(IsUnique=true)]
[Required()]
[MaxLength(100)]
public string Values { get; set; }
[MaxLength(100)]
public string Description { get; set; }
public ICollection<GroupProperty> GroupProperties { get; set; }
public ICollection<PostProperty> PostProperties { get; set; }
}
例如,管理员可以将模型的汽车属性添加到汽车组。之后,用户必须填写模型车场,以便在汽车组中进行广告宣传。
创建广告视图是这样的:
@model IEnumerable<Property>
<section>
<div class="container-fluid">
<div class="row">
<div class="col-md-6">
<h1>New Advertising</h1>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
foreach (var item in Model)
{
@Html.EditorFor(m => item)
}
<button type="submit">hvah</button>
}
</div>
<div class="col-md-6">
</div>
</div>
</div>
</section>
啊,一切都变得更难!我有一个Property类的Editor模板,如下所示:
@model Property
@helper Helper(Property model)
{
switch (model.Type)
{
case WebSite.Models.DomainModels.InputType.NonNegative:
{
<div class="form-group">
<label for="@(model.Name)">@(model.Title)</label>
<span class="field-validation-valid text-danger" data-valmsg-for="@(model.Name)" data-valmsg-replace="true"></span>
<input class="form-control text-box single-line valid" data-val="true"
name="@(model.Name)" type="number" value="0"/>
</div>
return;
}
case WebSite.Models.DomainModels.InputType.RequiredShortString:
{
<div class="form-group">
<label for="@(model.Name)">@(model.Title)</label>
<span class="field-validation-valid text-danger" data-valmsg-for="@(model.Name)" data-valmsg-replace="true"></span>
<input class="form-control text-box single-line" data-val="true"
id="@(model.Name)" name="@(model.Name)" type="text" value="BB"/>
</div>
return;
}
}
}
@Helper(Model)
毕竟我对属性进行了客户端验证。使用硬编码我也可以在服务器端验证它们。但新问题是绑定!如果服务器端验证出错,我需要传递一个模型再次查看。所以我认为我是以错误的方式做这件事。有人能帮我吗?也许关于如何解决我的问题或更好的方法来实现这个?一个简单的方法来使用MVC验证在这样的复杂模型上?
答案 0 :(得分:0)
我认为你想要创建一个类并验证ModelState
。你可以这样做 -
示例:
您可以像这样传递模型状态:
public class MyClass{
public static void errorMessage(ModelStateDictionary ModelState) {
if (something) ModelState.AddModelError("", "Error Message");
}
}
在控制器中使用:
MyClass.errorMessage(ModelState);
如果您需要有关外部modaestate验证的更多信息,那么您可以通过this链接获得更多帮助。