2

私は次のビューモデルを持っています:

namespace WebUx
{
    public class CityViewModel
    {
        public City City { get; set; }
        public IList<CityDetail> CityDetails { get; set; }
    }
}

次のマスタークラス:

Class City {
     public string Name { get; set; }
     public string Type { get; set; }
}

次の詳細クラス:

Class CityDetail {
     public string   Number { get; set; }
     public string   Street { get; set; }
}

私がやりたいことは、ビュー内のフォームが最初にいくつかの基本的な都市情報を表示し、次に10 個のCityDetail レコードがある下部に領域を持つビューでビューモデルを使用することです。

部分ビューでこれを行う方法はありますか? 部分ビューについていくつかのことを理解していますが、私のニーズを満たすためにこれをどのように書くことができますか? ビュー内から部分ビューを呼び出し、同時に入力可能な詳細を含む空のレコードを作成し、アクションに戻ったときにモデルの一部になることはできますか? どうすればラベルも処理できますか。たとえば、各通りのラベルを「Street 1」、「Street 2」などとして表示したいと思います。

4

2 に答える 2

1

はい、できます。実際、あなたは正しい道を進んでいますが、一般的に、エディターとディスプレイの場合EditorTemplatesDisplayTemplates部分ビューよりも優先されます

CityViewModel の設計は正しいです。そのようにします

CityDetail の DisplayTemplate を作成しますViews/Shared/DisplayTemplates/CityDetail.cshtml

City の EditorTemplate を作成しますViews/Shared/EditorTemplates/City.cshtml。これは次のようなものになります

@model City
@Html.LabelFor(model => model.Name)
@Html.EditorFor(model => model.Name)
@Html.LabelFor(model => model.Type)
@Html.EditorFor(model => model.Type)

アクション ビューを追加する

@model CityViewModel
@using(Html.BeginForm())
{
     @Html.EditorFor(model => model.City) // this will render city editor by calling editor template above
     <input type="submit" value="ok"/>
}
@Html.DisplayFor(model => model.CityDetails) //this will render all of cities in list by calling display template above for each

そして、アクション

public ActionResult CreateCity(CityViewModel cityModel)
{
    // cityModel.City is populated with values entered by user
}
于 2012-05-08T09:18:04.907 に答える
0

両方のエンティティを同じビューに表示できます。マスター エンティティの領域を作成し、続いて詳細エンティティのグリッドと、ChildWindow でこれらの詳細エンティティを開いて作成、編集、または削除するためのボタンを作成します。すべて同じビューモデルを使用しています。

次のように、サーバー側のオブジェクトに詳細エンティティを含めることを忘れないでください。

[MetadataTypeAttribute(typeof(MasterEntity.MasterEntityMetadata))]
    public partial class MasterEntity
    {
        internal sealed class MasterEntityMetadata
        {
            private MasterEntityMetadata()
            {
            }

            [Include]
            public EntityCollection<DetailEntity> DetailEntity{ get; set; }
        }
    }

そして、あなたのサービスで次のようにします:

public IQueryable<MasterEntity> GetMasterEntity()
        {
            return this.ObjectContext.MasterEntities.Include("DetailEntity").Where(p => SOMEFILTER).OrderBy(p => SOMEVALUE);
        }
于 2012-05-08T09:12:11.447 に答える