передать модель, сгенерированную с помощью automapper, в Html.editorformodel()

У меня есть несколько таблиц с адресными полями в моей базе данных. бывший:

Человек: имя, адрес, адрес1, идентификатор города, идентификатор штата, идентификатор страны, пин-код, ..
Компания: имя, адрес, адрес1, идентификатор города, идентификатор штата, идентификатор страны, пин-код, ..
..

Соответствующие модели просмотра:

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 в модели лица, чтобы автомаппер мог получить все данные)

и шаблон редактора для того же в /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'".
В этом случае я не знаю, как передать модель адреса, сгенерированную автоматическим сопоставлением, в шаблон редактора.

Я не могу использовать partialViews, потому что я хочу, чтобы поля адреса имели префикс basicInfo в этом случае, и мне не нужен префикс в другом случае.

Это сводит меня с ума уже пару дней. Пожалуйста помоги!!!


person EvilDevil    schedule 13.02.2014    source источник


Ответы (1)


Нашел эту статью, которая помогает решить эту проблему — http://thatextramile.be/blog/2011/01/prefixing-input-elements-of-partial-views-with-asp-net-mvc/

person EvilDevil    schedule 13.02.2014
comment
Это сработало! Я изменил PersonModel на public string LastName {get;set;} public string Email {get;set;} public long Phone {get;set;} public AddressModel addressModel {get;set;} - person EvilDevil; 13.02.2014