1

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

模型:

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

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

看法:

    <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>

谢谢你!

4

2 回答 2

1

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

这就是视图模型派上用场的地方。因此,您可以接受或多或少的输入,这些输入不一定(或具体)映射回您的模型或数据库。所以你可以有这样的东西:

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
}
于 2013-05-01T02:09:07.913 回答
0

您不能对不属于模型的属性进行验证。Html.Helper* FOR * 为特定属性创建 html 标签,如果它不存在,你想如何验证它?

如果您想将变量传递给控制器​​,您可以将其添加到视图中,并在后面添加视图包逻辑,但我并不真正理解您对验证该不存在值的含义。

于 2013-05-01T02:07:30.497 回答