【问题标题】:Dynamically add Views in ASP.NET MVC在 ASP.NET MVC 中动态添加视图
【发布时间】:2014-07-03 12:52:43
【问题描述】:

我最初使用 MVVM 为 WPF 开发一个项目,它的好处是允许我填充我想要可用的视图列表。每个视图都有一个“下一步”按钮,可以前进到列表中的下一个视图。

但是,现在我尝试在 ASP.NET MVC 中做同样的事情。这是我第一次使用 MVC,但我有一个 XML 文件,我需要从中生成这个 UI。这些从脚本中选择的视图也包含动态组件——有时 ViewA 可能需要 3 个嵌套在其中的“输入视图”,有时可能需要 1 个。

我之前通过 ListBoxItemsSourceDataTemplate 实现了这一目标。所以我的问题是:如何动态填充要显示的视图,以及(更重要的是)如何使用控件 A 的 x 数量和 y动态填充这些视图> 控制B的数量?

【问题讨论】:

  • 我不确定我是否完全理解您的要求……但部分视图可用于封装标记块,然后您可以根据需要在父视图中呈现这些标记。跨度>
  • 我认为这正是我想要的。我可以动态控制在父视图中呈现的部分视图的数量吗?有时说,根据用户输入,我想显示 1 个,有时我想显示 2 个这些局部视图。不使用visible,我可以控制吗?
  • 是的,您可以控制渲染部分视图的次数,但这发生在服务器端,因此每次您的页面布局需要更改时,您都必须再次从服务器请求它。我会试着打一个简单的例子......

标签: c# asp.net asp.net-mvc razor


【解决方案1】:

首先,项目结构的高级概述...

您的项目名称

  • 控制器
    • ProductController.cs
  • 型号
    • ProductViewModel.cs
  • 查看次数
    • _ProductPartial.cshtml
    • ListProducts.cshtml

ProductViewModel.cs

public class ProductViewModel
{
    public string Name { get; set; }
    public string Description { get; set; }
}

ProductController.cs

public class ProductController : Controller
{
    public ActionResult Index()
    {
        // Create your model (this could be anything...)
        var model = new List<ProductViewModel>
        {
            new ProductViewModel { Name = "Apple", Description = "A red apple" },
            new ProductViewModel { Name = "Orange", Description = "An orange orange" }
        };

        // Return the main view and your model
        return View("ListProducts", model);
    }    
}

_ProductPartial.cshtml

@model YourProjectName.Models.ProductViewModel

<h1>@Model.Name</h1>
<p>@Model.Description</p>

ListProducts.cshtml

@model System.Collections.Generic.List<YourProjectname.Models.ProductViewModel>

@foreach (var product in Model)
{
    Html.Partial("_ProductPartial", product)
}

总结

现在,如果您请求该控制器操作(localhost/Product/Index 或最终适合您的任何操作),控制器将创建模型,渲染父视图,父视图将渲染尽可能多的产品部分视图必要的取决于我们在控制器中定义的产品模型集合。视图和局部视图不需要模型,但我想您将使用某种模型类来帮助您确定要在父视图中呈现的内容/位置/多少局部视图。这几乎是最基本的,但它应该可以帮助您开始使用局部视图。

【讨论】:

  • 这太棒了——正是我想要的!非常感谢
  • 没问题,很高兴我能帮上忙!
猜你喜欢
  • 2017-05-08
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多