2011-02-25 126 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

相关问题