【发布时间】:2015-07-01 16:42:45
【问题描述】:
我正在创建一个内部 CMS 系统。我有一个检索项目并允许用户执行我们的各种管理任务的页面。
让我们看看以下内容:
引用(页)
Item (Page) - ItemDetails (Partial inside Item) - Artwork (部分内 ItemDetails)
用户选择一个报价。然后查看一个检索具有关联内容的项目的项目。在一个项目中,他们可以选择艺术品或任何其他选项卡(也可以选择部分视图)。
然后,用户可以更改内部 CMS 系统的值。我想:
- 预填充几个不同的下拉列表。 (如果有帮助,我有一些预先格式化的选择标签,我可以重复使用,用于 Angular 项目)。
- 如果发现附加到项目,这些下拉框应预加载任何现有值。
- 拥有能够更改和更新值的表单。
刚搬到 MVC 后,尽管在各种指南/教程上搜索了一天多,但我仍在努力完成它。万一您想知道我为什么要分离控制器,那是因为该项目将变得庞大。从架构上讲,这是有道理的。
示例:样机类型位于 Artwork 中。我使用了实体框架,并且成功检索了所有 MockupTypes。
第一部分:
@Html.Partial(MVC.Item.Views.ViewNames._TabbedItemDetailsPanel, Model.SelectedItem)
SelectedItem 视图模型:
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 个控制器。我到底如何将所有这些整合在一起?
非常感谢。
编辑:仍在努力让第二个控制器将视图发送到部分
【问题讨论】:
-
在这里查看我的答案stackoverflow.com/questions/18539149/…。将类更改为不同控制器上该类的路径,它应该适合您
标签: c# asp.net-mvc asp.net-mvc-4 model-view-controller architecture