2012-02-28 8 views
1

私はMVCにはかなり新しくなっていますが、私は最近、似たような話題のいくつかの類似記事を読んでいても克服できないような問題に直面しました。辞書に渡されたモデル項目は 'System.String'型ですが、この辞書には 'JFS.Data.Model.Address'型のモデル項目が必要です

次のように私は

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); 
     } 
    } 

私はこの問題を理解していますが、どのように克服するのが最善かそれはどんなアドバイスでも大歓迎です。メインビューで

答えて

1

置き換える:

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

で:

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

ところであなたは、おそらくのような他の特性を含めるAddressモデルの共有エディタのテンプレートを作成している場合このテンプレートのAddressLine1など

+0

それでも、次のように例外が発生しています。 辞書に渡されるモデル項目は 'System.String'型ですが、この辞書には 'JFS.Data.Model'というモデル項目が必要です。住所'。 – ProNotion

+2

@ ProNotion、おそらく、このエディタテンプレートを間違って呼び出すビューの他の部分があります。ビューモデルで '[UIHint]'属性を使用していますか? –

+0

それは素晴らしいです、それはまさにそれでした!助けてくれてありがとう。また、EditorTemplateに他のAddressプロパティを含めることについてアドバイスを受けた。 – ProNotion

1

あなただけAddressプロパティを渡す必要があります:

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

あなたがタイプの要件がAddressであるのに対し、stringのあるAddressプロパティを渡そうとしています。

2

あなたの特定のシナリオはすでに@ProNotionによって回答されていますが、ビューまたはテンプレートにnullを渡す前にこの問題が発生していました。他人がこのように来るのを助けるかもしれない。

関連する問題