使用不同的视图和控制器

时间:2015-04-23 13:08:26

标签: c# asp.net-mvc asp.net-mvc-4 model-view-controller architecture

我正在创建一个内部CMS系统。我有一个页面来检索项目,并允许用户执行我们的各种管理任务。

让我们看看以下内容:

  

引用(页面)

     

Item(Page) - ItemDetails(Item in Partial) - 作品(部分在ItemDetails中)

用户选择报价。然后查看一个项目,该项目检索具有相关内容的项目。在一个项目中,他们可以选择艺术品或任何其他标签(部分视图)。

然后,用户可以更改内部CMS系统的值。我想:

  1. 预先填充几个不同的下拉列表。 (如果它有帮助,我有一些预格式化的选择标签,我可以重复使用,用于角度项目)。
  2. 如果找到附加到项目的任何现有值,则应预先加载这些下拉框。
  3. 让表单能够更改值并更新它。
  4. 刚刚搬到MVC,尽管在各种指南/教程上搜索了一天以上,但我仍在努力指出它。万一你想知道我为什么要分离控制器,这是因为项目将变得庞大。在建筑方面,它是有道理的。

    示例:样机类型在艺术品中。我已经使用了实体框架,并且我正在成功检索所有的MockupTypes。

    第一部分:

    @Html.Partial(MVC.Item.Views.ViewNames._TabbedItemDetailsPanel, Model.SelectedItem) 
    

    SelectedItem viewModel:

    public class SelectedItem
    {
        public ArtworkDetailViewModel ArtworkDetail { get; set; }
        //Several others
    }
    

    ArtworkDetail包含:

    public class ArtworkDetailViewModel : DataViewModel
    {
        public int? ItemID { get; set; }
        public FaceColourViewModel FaceColour { get; set; }
        public MockupTypeViewModel MockupType { get; set; }
        public ProofingTypeViewModel ProofType { get; set; }
        //Others
    }
    

    这是由项目控制器引入的:

    public partial class ItemController : Controller
    {
        public virtual ActionResult ItemDetail(int itemId)
        {
            var model = new QuotePageViewModel();
            var item = itemViewModelService.GetItemByID(itemId);
            model.LiveQuotes = quotesOverviewViewModelService.GetItemsByQuote(item.QuoteID.Value);
            model.SelectedItem = item;
            return View(model);
        }
    }
    

    在上面发布的部分内容中,我有一个Artwork标签,这是另一个单独的局部视图:

     @Html.Partial(MVC.Item.Views._TabbedArtwork, new ViewModels.Artwork.ArtworkAttributesViewModel())
    

    我的想法是ArtworkAttributesViewModel将有一个预先填充的模型列表

    public class ArtworkAttributesViewModel
    {
        public IEnumerable<ProofingTypeViewModel> ProofTypes { get; set; }
        public IEnumerable<MockupTypeViewModel> MockupTypes { get; set; }
        //Others
    }
    

    这来自一个名为Artwork的独立控制器。

    public partial class ArtworkDetailController : Controller
    {
        [HttpGet]
        public virtual ActionResult GetAttributes()
        {
            var model = new ArtworkAttributesViewModel();
            model = artworkAttributesViewModelService.GetArtworkAttributes();
            return View(model);
        }
    }
    

    在_TabbedArtwork中,我开始创建一个表单:

    @model  ViewModels.Artwork.ArtworkAttributesViewModel
    
    @using (Html.BeginForm(MVC.ArtworkDetail.ActionNames.Index, MVC.ArtworkDetail.Name, FormMethod.Get))
    {
        <div class="row">
            <div class="col-md-12">
                <p><strong></strong> <br />
            </div>
            <div class="col-md-12">
                <div class="row show-grid">
                <p class="margin-bottom-zero"><strong>Mockup Types</strong></p>
                    <div class="col-md-3 col-xs-12">
                        @Html.DropDownListFor()
                        <select class="selectpicker"></select>
                    </div>
                </div>
            </div>
        </div>
    }
    

    总之,我有2个局部视图,2个视图模型和2个控制器。我怎么能把这一切带到一起呢?

    非常感谢。

    编辑:仍在争取让第二个控制器将视图发送到部分

1 个答案:

答案 0 :(得分:0)

您可以将下拉列表绑定到要编辑的项目和模型以填充它。

public class mainitem() {
    public int id { get; set; }
    public int type { get; set; }
}

public class type() {
    public int id { get; set; }
    public string name { get; set; }
}

public class myviewmodel() {
    public mainitem item { get; set; }
    public List<type> types { get; set; }
}

@Html.DropDownListFor(x => x.item.type, 
           new SelectList(Model.types, "id", "name"), "-Select-", 
           new { @class = "form-control" })