c# - 许多模型可以查看许多局部 View

标签 c# asp.net-mvc asp.net-mvc-3

我有一个包含许多部分 View 的 View ,我需要将匹配模型传递给每个 View 。

我找到了 2 种方法来做到这一点,但我不知道真正的方法应该是什么。

  1. 我想创建包含所有模型作为属性的大类,然后我可以将模型发送到每个局部 View 。问题是它是硬类型的,如果我需要传递不同的模型组合,它不适合。

  2. 我想到的另一种方法是在每个模型中都有一个方法,为每个局部 View (GetMenuBar() 等)提供模型。

正确的做法是什么?

最佳答案

我的建议是选择选项 1。我将它用于我所有的主视图/多个局部 View 场景。它很容易维护,因为每个部分都有自己的 ViewModel。它使整个事物保持整洁干净

我使用完全相同的设置:

public class MainViewModel {

    public Partial1ViewModel Partial1 [ get; set; }
    public Partial2ViewModel Partial2 [ get; set; }
    public Partial3ViewModel Partial3 { get; set; }
    public Partial4ViewModel Partial4 { get; set; }

    public MainViewModel() {}

    public MainViewModel() {
        Partial1 = new Partial1ViewModel();
        Partial2 = new Partial2ViewModel();
        Partial3 = new Partial3ViewModel();
        Partial4 = new Partial4ViewModel();
    }
}

每个 PartialViewXViewModel 都是它自己的 ViewModel,如果需要可以在另一个 View 中重复使用。

呈现的 Action 可能如下所示:

public ActionResult Index {
    var model = new MainViewModel();
    return View(model);
}

你的观点

@model MainViewModel

<div>
    {@Html.RenderPartial("PartialOne", Model.Partial1)}
</div>


<div>
    {@Html.RenderPartial("PartialTwo", Model.Partial2)}
</div>


<div>
    {@Html.RenderPartial("PartialThree", Model.Partial3)}
</div>


<div>
    {@Html.RenderPartial("PartialFour", Model.Partial4)}
</div>

为每个 PartialX 定义 UI,例如:

@model Partial1ViewModel

//view html here

现在,每个分部 View html 和他们使用的每个模型都可以在任何地方使用。

现在最重要的是,如果您的页面只需要其中的 2 个,您只需创建一个新的 ViewModel 来表示该特定 View ,如下所示:

public class OtherMainViewModel {

    public Partial2ViewModel Partial2 [ get; set; }
    public Partial4ViewModel Partial4 { get; set; }

    public OtherMainViewModel() {}

    public OtherMainViewModel() {
        Partial2 = new Partial2ViewModel();
        Partial4 = new Partial4ViewModel();
    }
}

然后像这样在另一个 View 中使用它:

public ActionResult SomeOtherAction {
    var model = new OtherMainViewModel();
    return View(model);
}

这是完全可以接受的,也是 MVC 中首选的设计策略,让 ViewModel 专门表示 View 需要什么,并且只表示它需要什么。

您可能希望使用不同的方法来填充您的模型。这里的大多数人会推荐使用 Automapper。无论哪种方式,以上只是在 MainViewModel 的构造函数中初始化 PartialViewXModels。如果您使用数据库中的数据填充这些模型,那不一定是您的情况。你会想要你自己的策略。这将在这里工作:

public ActionResult Index {
    var model = new MainViewModel();
    model.Partial1 = GetPartial1Data(); // this method would return Partial1ViewModel instance
    model.Partial2 = GetPartial2Data(); // same as above for Partial2ViewModel
    ...
    return View(model);
}

这一切只会让您开始设计,您可以根据自己的喜好调整它:-)

关于c# - 许多模型可以查看许多局部 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10769997/

相关文章:

c# - 如何使用 C# 和 ASP.net 代理 WebRequest?

C# - 图形用户界面问题

css - UI-SREF 在 _layout.cshtml 中不起作用

asp.net-mvc-3 - ASP.NET Web API - NTLM 身份验证和 HTTPS

c# - StringBuilder 与 StringWriter/StringReader

c# - 为什么要在此代码中使用 Action?

asp.net-mvc - Html.HiddenFor 和 HiddenInput 属性之间的区别

asp.net-mvc - ASP.NET MVC 3 中的模型元数据提供程序是否支持动态元数据?

asp.net-mvc-3 - "Kernel' 命名空间中不存在 'Sitecore'

javascript - 外部化脚本时如何在 javascript 中生成正确的 URL