Доступ к группам по полям из контроллера для просмотра в MVC 3 - PullRequest
1 голос
/ 21 декабря 2011

Как мне написать код в View, чтобы получить доступ к групповым полям в linq.Здесь данные отображаются через веб-сервис.

    public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Message = "Find Member";
        var obj = new SearchMemberServiceClient();
        List<MemberProxy> members = obj.FindMember("Mason", "Birkes", "", "", "", "").Members;

        var 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 { formattedname = k.Key.FormattedFullName, id = k.Key.PersonId, assoc = k.Key.Associations, memprox = k.Key.MembershipId };

        return View(sorted.ToList());
    }
}

1 Ответ

4 голосов
/ 21 декабря 2011

Вы передаете анонимный объект вашему представлению. Анонимные объекты испускаются компилятором как внутренние. Внутренние классы могут использоваться только в одной сборке. Представления 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>
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...