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

我想做的是在视图中使用视图模型,其中视图中的表单将首先显示一些基本的城市信息,然后在底部有一个区域,其中有十个CityDetail 记录。

有没有办法可以用局部视图来做到这一点?我了解有关局部视图的一些事情,但我怎么能写这个来满足我的需要呢?我什至可以从视图中调用部分视图,同时创建带有可以填写的详细信息的空白记录,当我返回我的操作时,这将成为模型的一部分。我怎么也能处理标签。例如,我希望每条街道的标签显示为“街道 1”、“街道 2”等。

4

2 回答 2

1

是的你可以。实际上你是在正确的方式,但一般来说,对于编辑器和显示,EditorTemplates并且DisplayTemplates比部分视图更受欢迎

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 回答