C# 使用不同的视图和控制器填充MVC中的下拉列表
我正在创建一个内部CMS系统。我有一个页面可以检索一个项目,并允许用户执行各种管理任务 让我们看看以下内容: 报价(第页) 项目(第页)-项目详情(项目内部分)-艺术品(项目详情内部分) 用户选择一个报价。然后查看检索具有关联内容的项目的项目。在项目中,他们可以选择艺术品或任何其他选项卡(也可以选择局部视图) 然后,用户可以更改内部CMS系统的值。我想:C# 使用不同的视图和控制器填充MVC中的下拉列表,c#,asp.net-mvc,asp.net-mvc-4,model-view-controller,architecture,C#,Asp.net Mvc,Asp.net Mvc 4,Model View Controller,Architecture,我正在创建一个内部CMS系统。我有一个页面可以检索一个项目,并允许用户执行各种管理任务 让我们看看以下内容: 报价(第页) 项目(第页)-项目详情(项目内部分)-艺术品(项目详情内部分) 用户选择一个报价。然后查看检索具有关联内容的项目的项目。在项目中,他们可以选择艺术品或任何其他选项卡(也可以选择局部视图) 然后,用户可以更改内部CMS系统的值。我想: 预先填充几个不同的下拉列表。(如果有帮助的话,我有一些预先格式化的select标记,我可以重复使用,在一个角度项目中使用过) 如果发现这些下拉
@Html.Partial(MVC.Item.Views.ViewNames._TabbedItemDetailsPanel, Model.SelectedItem)
选择EdItem 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
}
在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>
}
@model ViewModels.Artwork.ArtworkAttributes视图模型
@使用(Html.BeginForm(MVC.ArtworkDetail.ActionNames.Index、MVC.ArtworkDetail.Name、FormMethod.Get))
{
模型类型
@Html.DropDownListFor()
}
总之,我有2个部分、2个视图模型和2个控制器。我究竟该如何把这一切结合起来
非常感谢
编辑:仍在努力让第二个控制器将视图发送到局部视图。您可以将下拉列表绑定到要编辑的项目以及填充它的模型
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" })
public类mainitem(){
公共int id{get;set;}
公共int类型{get;set;}
}
公共类类型(){
公共int id{get;set;}
公共字符串名称{get;set;}
}
公共类myviewmodel(){
公共mainitem项{get;set;}
公共列表类型{get;set;}
}
@Html.DropDownListFor(x=>x.item.type,
新建选择列表(Model.types,“id”,“name”),“-Select-”,
新的{@class=“表单控制”})
如何让我的viewmodel调用其他控制器来填充我的selectlist?谢谢,您应该创建一个包含所有所需列表的viewmodel,并将其绑定到该视图的控制器操作中的视图,这不是一种糟糕的做法吗?最后,我将在一个类中集中大约70个viewmodel,我希望有一种方法将它们分离出来?我的理解是viewmodel为视图提供数据。因此,视图模型。如果您有70个视图,我假设您需要70个视图模型,除非您可以重复使用它们。可以从任何控制器调用viewmodel并将其传递到任何视图。请参见我的答案。将类更改为不同控制器上该类的路径,它应该适合您
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" })