У меня есть несколько таблиц, которые имеют адресные поля в моей базе данных. например:передать модель, сгенерированную с помощью automapper, в Html.editorformodel()
Person: имя, адрес, address1, CityId, stateid, CountryId, пин-код, ..
Компания: название, адрес, address1, CityId, stateid, CountryId, пин-код, ..
. .
Соответствующие ViewModels:
public class customermodel{
public PersonModel basicInfo {get;set;}
public string type {get;set;}
public long id {get;set;}
...
}
public class PersonModel{
public string FirstName {get;set;}
public string MiddleName {get;set;}
public string LastName {get;set;}
public string Email {get;set;}
public long Phone {get;set;}
public string address {get;set;}
public string address1 {get;set;}
public long cityid {get;set;}
public long stateid {get;set;}
public long countryid{get;set;}
public long pincode {get;set;}
}
Я создал класс для адреса:
public class AddressModel{
public string address {get;set;}
public string address1 {get;set;}
public long cityid {get;set;}
public long stateid {get;set;}
public long countryid{get;set;}
public long pincode {get;set;}
}
(Примечание: я не использовал AddressModel в personmodel так что automapper может тянуть все данные)
и editortemplate за то же самое в /Views/Shared/EditorTemplates/AddressModel.ascx
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<AddressModel>" %>
<%: Html.TextBoxFor(model => model.address, new { Placeholder = "Country" })%>
<%: Html.TextBoxFor(model => model.address1, new { Placeholder = "State", style="display:none;" })%>
...
В моем представлении EditCustomer я хочу вызвать шаблон редактора для адресной модели.
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CustomerModel>" %>
<%: Html.TextBoxFor(model => model.id) %>
<%: Html.TextBoxFor(model => model.type) %>
<%: Html.EditorFor(model => (AddressModel)AutoMapper.Mapper.DynamicMap<AddressModel>(model.personModel), "AddressModel")%>
...
Теперь я получаю следующее сообщение об ошибке для EditorFor
линии:
Шаблоны могут быть использованы только с доступом поля, доступ к собственности, индекс массива одного размера или одного параметра выражений пользовательских индексатор.
Я хочу использовать Html.EditorForModel("AddressModel");
, но это бросает мне ошибку
«System.InvalidOperationException: Модель элемент передается в словарь типа„CustomerModel“, но этот словарь требует модель элемента типа "AddressModel».
Я не знаю, как передать automapper сгенерированную адресную модель на editortemplate в этом случае.
Я не могу использовать partialViews, потому что в этом случае поля адреса должны иметь префикс basicInfo, и мне не нужен префикс в другом случае.
Это сводит меня с ума на пару дней. Пожалуйста помоги!!!
Он работал! Я изменил PersonModel на 'public string LastName {get; set;} public string Email {get; set;} public long Телефон {get; set;} public AddressModel addressModel {get; set;}' – EvilDevil