表单字段的验证不在模型类中

时间:2013-05-01 02:02:51

标签: asp.net-mvc-4

我正在尝试为不在我的数据库模型中的表单字段添加必需的验证。目前在我的数据库模型中,我有2个值。

型号:

public class Values{
    [Required]
    public string Value1{ get; set; }
    [Required]
    public string Value2 { get; set; }
}

我希望我的视图表单中的第三个值可以处理验证,但它在数据库中不存在,所以我的数据库模型中不应该存在,但我需要它在Controller中使用。

查看:

    <div class="editor-field">
        @Html.EditorFor(model => model.Value1)
        @Html.ValidationMessageFor(model => model.Value1)
    </div>

    <div class="editor-field">
        @Html.EditorFor(model => model.Value2)
        @Html.ValidationMessageFor(model => model.Value2)
    </div>

如何使用相同的简单验证添加第三个字段,但在我的数据库中不存在?如果没有,我怎样才能实现类似的验证?

示例:

      <div class="editor-field">
        @Html.EditorFor(model => model.Value3)
        @Html.ValidationMessageFor(model => model.Value3)
      </div>

谢谢!

2 个答案:

答案 0 :(得分:1)

  

如何使用相同的简单验证添加第三个字段,但是   在我的数据库中不存在?

这是viewmodel派上用场的地方。因此,您可以接受更多或更少的输入,这些输入不一定(或特别)映射回您的模型或数据库。所以你可以这样:

public class ValuesViewModel {
    [Required]
    public string Value1{ get; set; }
    [Required]
    public string Value2 { get; set; }
    [Required]
    public string Value3 { get; set; }
}

然后,从数据库中查询模型并将其映射到该视图模型。像这样:

public ActionResult GetValues() {
    var values = getFromDb();
    return View(new ValuesViewModel {
        Value1 = values.Value1;
        Value2 = values.Value2;
        Value3 = some_other_value;
    });

}

然后,您可以将其与数据库中的字段一起接收,并根据需要进行操作。

[HttpPost]
public ActionResult PostValues(ValuesViewModel input) {
    var values = getFromDb();
    // map values back to the model from the viewmodel
    values.Value1 = input.Value1;
    values.Value2 = input.Value2;
    // some logic applied to Value3
    // etc, etc
    // save your model to the database
}

答案 1 :(得分:0)

您无法对不构成模型一部分的属性进行验证。 Html.Helper * FOR *为特定属性创建html标记,如果它不存在,您想如何验证它?

如果你想将一个变量传递给控制器​​,你只需将它添加到视图包后面的视图包逻辑但我真的不明白你对验证那个不存在的值的意思。