2013-05-01 44 views
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> 

謝謝!

回答

1

如何添加第三個字段具有相同的簡單驗證,但該數據庫中不存在 ?

這是viewmodel派上用場的地方。因此,您可以接受更多或更少的輸入,這些輸入不一定(或特別)映射回您的模型或數據庫。所以你可以有這樣的東西:

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

然後,您從數據庫中查詢模型,並將其映射到該viewmodel。事情是這樣的:

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 
} 
+0

這是有道理的,我會去嘗試一下。讓你知道我找到了什麼。 – Dom 2013-05-01 02:17:22

+0

這正是我所需要的。謝謝你拓寬我的視野von訴 – Dom 2013-05-01 02:57:58

+0

不客氣@Dom – 2013-05-01 02:59:08

0

您不能對屬於模型的屬性進行驗證。 Html.Helper * FOR *爲特定屬性創建html標記,如果它不存在您想如何驗證它?

如果你想將一個變量傳遞給控制器​​,你可以在視圖中添加視圖,並在視圖背後隱藏邏輯,但是我不能真正理解你的意思是驗證這個不存在的值。