Элемент модели, передаваемый в словарь, имеет тип «System.String», но для этого словаря требуется элемент модели типа «JFS.Data.Model.Address». - PullRequest
1 голос
/ 29 февраля 2012

Я довольно новичок в MVC, но добивался устойчивого прогресса, однако недавно я столкнулся с проблемой, которую, похоже, не могу преодолеть, несмотря на чтение ряда похожих постов на похожие темы.

У меня естьследующая модель (упрощенная для краткости)

public virtual int Id { get; set; }

public virtual string Name { get; set; }

public virtual Address Address { get; set; }

У меня строго типизированное представление:

@model JFS.Data.Model.Supplier

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)  

     <fieldset>
        <legend>Supplier Address</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Address.AddressLine1)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Address.AddressLine1)
            @Html.ValidationMessageFor(model => model.Address.AddressLine1)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Address.Country)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Address.Country)
            @Html.ValidationMessageFor(model => model.Address.Country)
        </div>

    </fieldset>

И у меня есть общий EditorTemplate для поля Страна, как показано ниже:

 @model JFS.Data.Model.Address

    @using System.Globalization

    @Html.DropDownListFor(o => o.Country, GetCountries(Model), "Please select")

    @functions
    {
        private static IEnumerable<SelectListItem> GetCountries(object country)
        {
            var regions = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
                            .Select(cultureInfo => new RegionInfo(cultureInfo.LCID))
                            .OrderBy(r => r.EnglishName)
                            .Distinct()
                            .ToList();
            return new SelectList(regions, "TwoLetterISORegionName", "EnglishName", country);
        }
    }

Я понимаю проблему, но не знаю, как лучше ее преодолеть, любой совет будет очень признателен.

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Несмотря на то, что @ProNotion уже ответил на ваш конкретный сценарий, я уже сталкивался с этой проблемой, когда вы пропускали ноль в своих представлениях или шаблонах.Это может помочь кому-то другому прийти сюда.

1 голос
/ 29 февраля 2012

Вам нужно просто передать свойство Address:

@Html.EditorFor(model => model.Address)

Вы пытаетесь передать свойства Address, которые равны string с, тогда как требование типа Address.

1 голос
/ 29 февраля 2012

На вашем главном экране заменить:

@Html.EditorFor(model => model.Address.Country)

с:

@Html.EditorFor(model => model.Address)

Кстати, если вы пишете шаблон общего редактора для модели Address, вы, вероятно, захотите включить в этот шаблон и другие свойства, например AddressLine1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...