【问题标题】:Validation of Form Field not in Model Class验证不在模型类中的表单字段
【发布时间】:2013-05-01 10:12:33
【问题描述】:

我正在尝试为不在我的数据库模型中的表单字段添加必需的验证。目前在我的数据库模型中,我有 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>

谢谢!

【问题讨论】:

    标签: asp.net-mvc-4


    【解决方案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
    }
    

    【讨论】:

    • 这很有道理,我要试试。告诉你我发现了什么。
    • 这正是我所需要的。感谢您拓宽我的视野 von v.
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 2014-11-08
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多