automapper decimal?小数?字段给MVC3中的十进制到字符串转换错误?

时间:2012-03-14 02:19:55

标签: asp.net-mvc-3 automapper

我有一个DTO和一个ViewModel

Bot具有与Price相同的属性,如下所示:

public Nullable<decimal> Price
    {
        get;
        set;
    }

在我的POST ActionResult中,当tryig保存到db时我有......

                Mapper.CreateMap<ListingFormModel, Listing>()


                var newListing = Mapper.Map<ListingFormModel, Listing>(m);


                _listingRepository.Add(newListing);

我得到的错误: 无法将类型为“System.Decimal”的对象强制转换为“System.String”。

我刚刚开始使用automapper,就在今天,所以我很困惑为什么相同的类型没有正确映射?在浏览自动播放器文档时,我看到了以下示例:

.ForMember(dest => typeof(decimal?), src => src.ResolveUsing<MyDecimalResolver>());

但是如果我从一开始就没有做某事,我不知道为什么我需要制作一个解析器?有什么建议吗?

完整代码:

public class ListingFormModel
{

    [Required]
    public int ListingID
    {
        get;
        set;
    }

   .....


    [Required]
    [RegularExpression("([0-9]+)", ErrorMessage="Asking Price must be numbers only. Example: For $125,000 enter 125000")] //for 0-inf or 
    [Display(Name = "Asking Price")]
    [StringLength(10, ErrorMessage = "Asking Price must be numbers only and may not exceed 10 characters. Example: For $1,500,000 enter 1500000")]
    public Nullable<decimal> Price
    {
        get;
        set;
    }

.....

在我的xxxx.Common项目中的DTO / POCO: 命名空间LOTW2012.Common {     public partial class Listing     {         #region原始属性

    public virtual int ListingID
    {
        get;
        set;
    }

   ......

    public virtual Nullable<decimal> Price
    {
        get;
        set;
    }


  .....

然后xxxx.Web项目中的CONTROLLER:

[HttpPost]
    [ValidateAntiForgeryTokenWrapper(HttpVerbs.Post)]
    public ActionResult Create(ListingFormModel m)
    {
        try
        {
            if (ModelState.IsValid && SecurityHelper.ReferrerIsValid)
            {

                Mapper.CreateMap<ListingFormModel, Listing>()
                   // .ForMember(dest => dest.Price, opt => opt.ResolveUsing<NullableDecimalResolver>());

                var newListing = Mapper.Map<ListingFormModel, Listing>(m);


                _listingRepository.Add(newListing);

                return RedirectToAction("Index");
            }
            else
            {
                return View();
            }

        }
        catch
        {
            return View();
        }
    }

0 个答案:

没有答案