<p>I think I know the answer, but I would like to bounce around some ideas.</p>

<p>I would like to pass several (in this instance 2) somewhat different pieces of data to a View.  My initial thought is simply to wrap-up the various objects into a containing object and pass them along that way. Then from the View, I'd have something like </p>

<pre><code>var objContainer = ViewData.Model;
var thisObject = objContainer.ThisObject;
var thatObject = objContainer.ThatObject;
</code></pre>

<p>and these could be used independently in the Master Page and View Page.</p>

<p>Is that the "best" way?</p>

I've got the same dealie going on.  Here's my solution (may not be the best practice, but it works for me).
I created a number of "Grouping" classes:
```
```
public class Duo<TFirst,TSecond> { /*...*/ }
public class Trio<TFirst,TSecond, TThird> { /*...*/ }
```
```
and a factory object to create them (to take advantage of type inference... some of the TFirsts and TSeconds and TThirds can be LONG)
```
```
public static class Group{

public static Duo<TFirst, TSecond> Duo(TFirst first, TSecond second) { 
  return new Duo<TFirst, TSecond>(first, second);
 }    
/*...*/
}
```
```
It gives me type safety and intellisense with a minimum of fuss.  It just smells because you're grouping together classes that essentially have no real relation between them into a single object.  I suppose it might be better to extend the ViewPage class to add a second and third ViewModel, but the way I did it takes lots less work.