English 中文(简体)
以许多部分意见看待的许多模式
原标题:Many models to view with many partial views

我的看法是,我的观点有许多片面的看法,我需要把匹配模式传给每一个人。

我找到了两种方法来做这个, 但我不知道应该怎么做。

  1. 我本想创造大阶级, 将所有模型都作为属性, 而不是我能将模型发送到每个局部观点。问题在于它硬打字, 以及如果我需要通过不同模型的组合, 它不合适。

  2. 反之,我想在每种模型中都有一种方法, 将每种局部视图的模型( GetMenuBar () 等) 带给我。

什么是正确的方法 这样做?

最佳回答

我的建议, 与选项 1 使用我的所有主视图/ 多重部分视图设置, 很容易维持, 因为每个部分都有自己的视图模式。 它让整件事保持美好和干净 。

我使用完全相同的设置 像这样:

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 是它自己的视图模式,如果需要,可以在另一个视图中重新使用。

你的动作可以看起来是这样的:

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 的用户界面如下:

@model Partial1ViewModel

//view html here

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

最大的部分是, 如果您有一个页面只需要其中两个, 您只需创建一个新的 < code> ViewModel 来表达这个特定视图, 像这样 :

public class OtherMainViewModel {

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

    public OtherMainViewModel() {}

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

用在另一种观点上,就像这样:

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

这完全可以接受,也是MVC的首选设计策略, 要有视觉模型, 具体代表一种观点需要什么, 并且只代表它需要什么。

您可能想要使用不同的方法来弹出您的模型。 多数情况下, 这里推荐使用自动映射器。 无论哪种方式, 以上都只是初始化了 MainViewModel 的构建器中的部分ViewX 模式。 如果您正在用 DB 中的数据来弹出这些模型, 情况就不一定是你。 您会希望您自己为此制定策略 。 这将在这里有效 :

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);
}

这一切只会让你从设计开始, 你可以把它调整到心的内容:-)

问题回答

暂无回答




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签