问题描述
当我尝试将数据提交到数据库时,出现以下错误:
When I try to submit data into database i get following error:
请告诉我为什么我会收到此错误,因为经过这么多努力我还是无法解决.
Please tell me why i am getting this error as i am not able to figure it out after so much effort.
这是我的控制器代码
public CompanyController() { }
private readonly ICompanyService _companyService;
public CompanyController(ICompanyService companyService) {
_companyService = companyService;
}
这是控制器中的SaveData方法
This is the SaveData method in the controller
[HttpPost]
public JsonResult SaveData(CompanyFormViewModel companyFormViewModel)
{
try
{
int? id = null;
Company company;
if (companyFormViewModel.Id == null)
{
company = new Company();
}
else
{
id = (int)companyFormViewModel.Id;
company = _companyService.GetCompany((int)id);
}
company = (Company)Mapper.Map(
companyFormViewModel,
company,
typeof(CompanyFormViewModel),
typeof(Company));
CompanyValidator companyValidator = new CompanyValidator();
ValidationResult validationResult = companyValidator.Validate(company);
if (validationResult.IsValid) //check for any validation errors
{
if (id == null)
{
_companyService.CreateCompany(company);
}
else
{
_companyService.Update(company);
}
_companyService.SaveCompany();
return new JsonSuccessResult();
}
else
{
Response.StatusCode = (int)ResponseCode.UnprocessableEntity;
return new JsonErrorResult(validationResult);
}
}
catch (Exception ex)
{
Response.StatusCode = (int)ResponseCode.UnprocessableEntity;
return new JsonErrorResult(ex.ToString());
}
}
我的表单查看代码
@using (Html.BeginForm("SaveData", "Company", FormMethod.Post, new { @class = "", @id = "validate", @role = "form" })) {
@*<form id="validate" method="POST" action="javascript:alert('Form #validate submited');">*@
<div class="head tac">
<h1>Register Your Company With Us!!!</h1>
</div>
<div class="block">
<div class="header">
<div class="side pull-right">
<button class="btn btn-default btn-clean" onclick="clear_form('#validate');" type="button">Clear form</button>
</div>
</div>
<div class="content controls">
<div class="form-row">
<div class="col-md-3">Company Name:</div>
<div class="col-md-9">
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "validate[required,maxSize[100]]", @placeholder = @Html.DisplayNameFor(model => model.Name) } })
</div>
</div>
<div class="form-row">
<div class="col-md-3">Owner Name:</div>
<div class="col-md-9">
@Html.EditorFor(model => model.Owner, new { htmlAttributes = new { @class = "validate[required,maxSize[60]]", @placeholder = @Html.DisplayNameFor(model => model.Owner) } })
</div>
</div>
<div class="form-row">
<div class="col-md-3">Email:</div>
<div class="col-md-4">
@Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "validate[required,maxSize[60]]" ,@type="email", @placeholder = @Html.DisplayNameFor(model => model.Email) } })
</div>
</div>
<div class="form-row">
<div class="col-md-3">Password:</div>
<div class="col-md-9">
@Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "validate[required,maxSize[100]]", @type="password", @id="password", @placeholder = @Html.DisplayNameFor(model => model.Password) } })
</div>
</div>
<div class="form-row">
<div class="col-md-3">Confirm Password:</div>
<div class="col-md-9">
@Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "validate[required,equals[password]]", @type = "password", @placeholder = @Html.DisplayNameFor(model => model.Password) } })
</div>
</div>
@* I have omitted some code from here for saving your time to read*@
<div class="form-row">
<div class="col-md-3">Address:</div>
<div class="col-md-9">
@Html.EditorFor(model => model.Address, new { htmlAttributes = new { @class = "validate[required,maxSize[60]]", @placeholder = @Html.DisplayNameFor(model => model.Address) } })
</div>
</div>
</div>
<div class="footer">
<div class="side pull-right">
<div class="btn-group">
<button class="btn btn-default" type="button" onclick="$('#validate').validationEngine('hide');">Hide prompts</button>
<button class="btn btn-success" type="submit">Submit</button>
</div>
</div>
</div>
</div>
}
这是我的公司型号代码
public string Name {get;set;}
public string Logo { get; set; }
public string Address { get; set; }
public string Owner { get; set; }
public int Size { get; set; }
public string Email { get; set; }
public int Phone { get; set; }
public int FaxNo { get; set; }
public string Password { get; set; }
public string Country { get; set; }
public string State { get; set; }
这是ViewModel代码
This is ViewModel Code
public CompanyFormViewModel() { }
public int? Id { get; set; }
[DisplayName(" Company Name")]
public string Name { get; set; }
[DisplayName("Owner")]
public string Owner { get; set; }
[DisplayName("Email")]
public string Email { get; set; }
[DisplayName("Password")]
public string Password { get; set; }
[DisplayName("Address")]
public string Address { get; set; }
这是DomainToViewModelMapping配置文件
Here is DomainToViewModelMapping Profile
cfg.CreateMap<Company, CompanyFormViewModel>()
.ForMember(vm => vm.Id, map => map.MapFrom(m => m.Id))
.ForMember(vm => vm.Name, map => map.MapFrom(m => m.Name))
.ForMember(vm => vm.Owner, map => map.MapFrom(m => m.Owner))
.ForMember(vm => vm.Email, map => map.MapFrom(m => m.Email))
.ForMember(vm => vm.Password, map => map.MapFrom(m => m.Password))
.ForMember(vm => vm.Address, map => map.MapFrom(m => m.Address));
我的viewModeltoDomainMapping配置文件
My viewModeltoDomainMapping Profile
cfg.CreateMap<CompanyFormViewModel, Company>()
.ForMember(m => m.Id, map => map.MapFrom(vm => vm.Id))
.ForMember(m => m.Name, map => map.MapFrom(vm => vm.Name))
.ForMember(m => m.Owner, map => map.MapFrom(vm => vm.Owner))
.ForMember(m => m.Email, map => map.MapFrom(vm => vm.Email))
.ForMember(m => m.Password, map => map.MapFrom(vm => vm.Password))
.ForMember(m => m.Address, map => map.MapFrom(vm => vm.Address));
为什么我会得到未初始化的映射器错误?
Why am I getting this error of mapper not initialized?
推荐答案
无法看到在哪里初始化映射.
Cannot see where you initialize the mapping.
解决方案:
您可以创建您的映射配置文件,例如:
You can create your mapping profile, for example:
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<Company, CompanyFormViewModel>()
.ForMember(vm => vm.Id, map => map.MapFrom(m => m.Id))
.ForMember(vm => vm.Name, map => map.MapFrom(m => m.Name))
.ForMember(vm => vm.Owner, map => map.MapFrom(m => m.Owner))
.ForMember(vm => vm.Email, map => map.MapFrom(m => m.Email))
.ForMember(vm => vm.Password, map => map.MapFrom(m => m.Password))
.ForMember(vm => vm.Address, map => map.MapFrom(m => m.Address));
CreateMap<CompanyFormViewModel, Company>()
.ForMember(m => m.Id, map => map.MapFrom(vm => vm.Id))
.ForMember(m => m.Name, map => map.MapFrom(vm => vm.Name))
.ForMember(m => m.Owner, map => map.MapFrom(vm => vm.Owner))
.ForMember(m => m.Email, map => map.MapFrom(vm => vm.Email))
.ForMember(m => m.Password, map => map.MapFrom(vm => vm.Password))
.ForMember(m => m.Address, map => map.MapFrom(vm => vm.Address));
}
}
然后在Global.asax.cs
public class AutoMapperConfiguration
{
public static void Configure()
{
Mapper.Initialize(x =>
{
x.AddProfile<MappingProfile>();
});
Mapper.Configuration.AssertConfigurationIsValid();
}
}
最后,不要忘记在Application_Start()
//Configure Automapper
AutoMapperConfiguration.Configure();
这篇关于自动映射器,映射器未初始化.使用正确的配置调用初始化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!