Вы передаете анонимный объект вашему представлению. Анонимные объекты испускаются компилятором как внутренние. Внутренние классы могут использоваться только в одной сборке. Представления ASP.NET MVC динамически компилируются средой выполнения ASP.NET в отдельных сборках. По сути, это означает, что вы не можете получить доступ к анонимным типам, созданным в действиях вашего контроллера внутри ваших представлений. Как следствие, это означает, что вы никогда не должны передавать анонимные объекты в ваши представления. Поэтому, если вы не можете передать анонимные объекты, передайте именованный объект , создав его. В этом случае они будут называться моделью представления. Модель представления - это класс, который вы специально определяете в соответствии с требованиями вашего представления.
Итак, каковы требования вашего взгляда - это первый вопрос, который вы должны задать себе при разработке приложения ASP.NET MVC? Ну, в этом случае вам, кажется, понадобится пара свойств (formattedname
, id
, assoc
и memprox
). Отлично, давайте напишем вид модели:
// you probably want to find a more suitable name
public class MyViewModel
{
public int Id { get; set; }
public int MemProx { get; set; }
public string FormattedName { get; set; }
public IEnumerable<Association> Associations { get; set; }
}
и затем ваше действие передаст эту модель вида представлению:
public ActionResult Index()
{
var obj = new SearchMemberServiceClient();
var members = obj.FindMember("Mason", "Birkes", "", "", "", "").Members;
IEnumerable<MyViewModel> sorted =
from a in members
orderby a.FirstName ascending
group a by new
{
a.FormattedFullName,
a.PersonId,
a.Associations,
a.MembershipsProxy[0].MembershipId
} into k
select new MyViewModel
{
FormattedName = k.Key.FormattedFullName,
Id = k.Key.PersonId,
Associations = k.Key.Associations,
MemProx = k.Key.MembershipId
};
return View(sorted.ToList());
}
ОК, теперь вы можете строго ввести свой вид в эту модель представления и представить информацию, которая в нем содержится, как вам нужно:
@model IEnumerable<MyViewModel>
@foreach (var item in Model)
{
<div>@item.FormattedName</div>
...
}