2011-02-25 177 views
0

我想允許輸入字段的多種輸入格式。在我的情況下,它是一個經度字段。在數據庫中,我將它設置爲十進制(18,10)。它期望得到一個逗號分隔值,例如16,2345678但Google地圖或某些用戶正在使用點16.2345678 我不想返回一個錯誤,但只是很高興,並將其轉換爲預期的數據庫格式。asp.net mvc:允許輸入字段的多種輸入格式

我試圖做到這一點在我的元數據驗證類(使用實體框架)

public partial class Job 

    /*[Bind(Exclude = "ID")]*/ 
    public class JobMetaData 
    { 
     public object Longitude 
     { 
      get { return this.Longitude; } 
      set { this.Longitude = value; /* Seems that this point isnt reached*/ } 
     } 

,但不幸的是二傳手不叫和ViewState.isValid返回根本就是假的。

[HttpPost] 
    public ActionResult Edit(Job model) 
    { 

     // parse the long-lat if needed here?? 

     try 
     { 
      if (!ModelState.IsValid) 
      { 

我應該在哪裏嘗試解析值以允許兩個值(逗號分隔和點分隔)轉換它們並使其安全。

我對另一個字段有同樣的問題:我希望用戶輸入4或4€,以防止刪除€-sign並將其保存爲數字。

感謝您的幫助。

+1

您搞定;設置;看起來像遞歸到我 – Omu 2011-02-25 20:03:12

+0

似乎。但我很確定。它是一個部分類,在這個部分類的「其他部分」中,還有一個帶有get/set(EntityFramework類)的屬性Longitude。看來這個get/set並沒有被實際調用,所以我不能做任何預處理。 – LukeSolar 2011-02-27 19:06:44

回答

0

使用字符串類型,並做任何你想要的。

public partial class Job 
{ 
    public class JobMetaData 
    { 
     public string Longitude { get; set; } 
    } 
} 
+0

@Oenning不幸的是它不工作。 EF模型本身由包含一些基本驗證的數據庫生成(類型,必需)。此JobMetaData類在其上添加其他的valiation屬性。我認爲在這個地方添加一些預處理是有意義的。我承認我不確定我是否正確? – LukeSolar 2011-02-27 22:24:30

1

如果你對另一個字段有同樣的問題。
作爲最佳實踐 -
1]使用視圖模型「JobViewModel」

2]因此,如果需要,您可以創建自定義屬性驗證您的其他性能

3]編輯帖子接受視圖模型。 [HttpPost] 公共的ActionResult編輯(工作模型) {

// parse the long-lat if needed here?? 

    try 
    { 
     if (!ModelState.IsValid) 
     { 

4]和如果Modellstate的isValid執行所需的解析,然後將其保存到數據庫中。

編輯

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit(JobViewModel jobviewModel) 
    { 
    try 
     { 
       if (!ModelState.IsValid) 
     { 
      jobviewModel.Longitude.replace(".",",") 
      -- save DB logic here 

     } 

    } 

    } 

public class JobViewModel 
{ 
    public string Longitude{ get; set; } 
} 


For GET methods need to use use Automapper. or 

    jobviewModel.Longitude = model.Longitude 
+0

使用自定義驗證屬性,如何執行任何預處理?在這樣的自定義屬性定義裏面有一個方法isValid返回true/false,但是如果需要的話它不可能糾正一個值 - 我可以返回true來進行驗證,但是錯誤的值會被傳遞給db,從而引發錯誤。我有東西丟了嗎? – LukeSolar 2011-02-27 19:10:30

+0

@LukeSolar你是對的。自定義驗證屬性將爲您提供Isvalid方法來返回true或flase-但使用viewmodel是MVC項目的推薦做法,這將幫助您按照您的要求修改值,然後將修改過的viewmodel保存到數據庫中。 – swapneel 2011-02-27 19:17:15

+0

請參考http://stackoverflow.com/questions/709429/asp-net-mvc-best-practices-tips-and-tricks – swapneel 2011-02-27 19:19:08

相關問題