Отправить две модели в одном представлении .Net в VB - PullRequest
1 голос
/ 12 июля 2010

Отредактируйте еще раз:

Так что, похоже, я вычислил и адресную часть в моем классе:

Public ReadOnly Property addresses As IEnumerable(Of Address)
        Get
            Return _these_addresses
        End Get
    End Property

И в шаблоне у меня есть:

<% For Each item In Model.addresses%>

        <tr>
            <td>
                <a href='<%: Url.Action("Edit", "Address", New With { .pid=Model.ContactID, .id=item.AddressID }) %>'>
                    <img src='<%: Url.Content("~/Content/Images/Edit.jpg") %>' alt="Edit"  />
                </a> 
                <a href='<%: Url.Action("Details", "Address", New With { .pid=Model.ContactID, .id=item.AddressID }) %>'>
                    <img src='<%: Url.Content("~/Content/Images/Detail.jpg") %>' alt="Details"  />
                </a> 
                <a href='<%: Url.Action("Delete", "Address", New With { .pid=Model.ContactID, .id=item.AddressID }) %>'>
                    <img src='<%: Url.Content("~/Content/Images/Delete.jpg") %>' alt="Delete"  />
                </a>
            </td>
            <td>
                <%: item.Street%>
            </td>
            <td>
                <%: item.City%>
            </td>
            <td>
                <%: item.StateID%>
            </td>
            <td>
                <%: item.CountryID%>
            </td>
            <td>
                <%: item.Zip%>
            </td>
         </tr>
    <% Next%>

    </table>

Снова отредактируйте:

Я добавил это для каждого поля в контакте с классом, и оно работает ... Мне просто нужно выяснить список адресов сейчас ...

Public ReadOnly Property FirstName() As String
        Get
            Return _this_contact.FirstName
        End Get
    End Property

РЕДАКТИРОВАТЬ:

Я уже понял это:

Я сделал снимок в темноте и сделал ContactViewModel на основе примеров C, которые я нашел в исследованиикак это сделать

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports TotallyAwesomeCRM.Contact
Imports TotallyAwesomeCRM.Address

Public Class ContactViewModel
    Public contact As Contact
    Public address As Address
    Private _this_contact As Contact
    Private _these_addresses As System.Linq.IQueryable(Of Address)

    Sub New(ByVal this_contact As Contact, ByVal these_addresses As System.Linq.IQueryable(Of Address))
        ' TODO: Complete member initialization -this was added by the framework for me when I tried to call this class - I don't know what to do here - resources? 
        _this_contact = this_contact
        _these_addresses = these_addresses
    End Sub

End Class

Так в моем контроллере I:

Function Details(ByVal id As Integer) As ActionResult
        Dim this_contact = GetContact(id)
        Dim these_addresses =
            From address In addressDataContext.Addresses, xref In addressDataContext.ContactAddressesXrefs
            Where address.AddressID = xref.AddressID And xref.ContactID = id
            Select address

        Dim viewModel = New ContactViewModel(this_contact, these_addresses)
        Return View(viewModel)
    End Function

И в шаблоне он нашел контакт, когда я начал набирать Model.contact

<%: Model.contact.FirstName%>

Но это дало мне ошибку там: NullReferenceException: Ссылка на объект не установлена ​​на экземпляр объекта.

Это не должно быть null ..Пожалуйста, помогите мне разобраться в TODO

==================================================================================== ОРИGINALPOST:

Это мое первое предприятие .NET.Все, что я сделал до сих пор, я понял.

ОК У меня есть контакты, и контакты могут иметь много адресов.Я хотел бы отображать эти адреса при просмотре сведений о контакте. Я также хотел бы иметь контейнер, представляющий собой список его адресов.Из этого списка я хочу иметь возможность редактировать / удалять / просматривать адрес.

Моя структура базы данных:

Таблицы:

Contacts
<contains contact info and PK>

Addresses
<contains address info and PK>

ContactAddressesXref
ContactID
AddressID

Я в основном былредактирование файлов скелета пустое приложение ASP.NET MVC предоставляет мне

Итак, вот последнее, что я попробовал в своем контроллере контактов:

'
    ' GET: /Contacts/Details/5

    Function Details(ByVal id As Integer) As ActionResult
        Dim this_contact =
                        From contact In dataContext.Contacts, address In addressDataContext.Addresses, xref In addressDataContext.ContactAddressesXrefs
                        Where address.AddressID = xref.AddressID And xref.ContactID = id
                        Select contact, address
        Return (View(this_contact))
    End Function

Что я действительно хотел сделать, так это запросадреса отдельно и отправьте их как их собственный набор.Я не знаю, правильно ли это делать, но когда я пытался отправить две модели, это приводило в бешенство.

Что не получается, конечно, потому что в представлении есть это:

<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of IEnumerable (Of TotallyAwesomeCRM.Contact))" %>

Я пытался:

Inherits="System.Web.Mvc.ViewPage(Of IEnumerable (Of TotallyAwesomeCRM.Contact, Of TotallyAwesomeCRM.Address))

Он сказал:

 'InitializeCulture' is not a member of 'ASP.views_contacts_details_aspx'.

Итак, я попытался:

Inherits="System.Web.Mvc.ViewPage"

И здесь выдает ошибку:

<div class="display-field"><%: Model.FirstName%></div>

Конечно, так я ошибаюсь в контроллере?Я знаю, что у меня не может быть просто System.Web.Mvc.ViewPage (из IEnumerable (из TotallyAwesomeCRM.Contact)), который должен был бы принимать больше этого.Я попытался соединиться с частью Model.FirstName, в которой было указано Contact.FirstName, но в раскрывающемся списке не появилось, когда я начал писать Contact.Я мог бы сделать это легко на других языках, .Net, кажется, другая игра с мячом.Пожалуйста, помогите!

1 Ответ

1 голос
/ 13 июля 2010

Вам не нужно "todo: полная инициализация элемента ..." (кроме того, удалите его :-)). Вам нужно поменять недвижимость на контакт и адрес.

Попробуйте это:

Public Class ContactViewModel

    Private _this_contact As Contact
    Private _these_addresses As System.Linq.IQueryable(Of Address)

    Sub New(ByVal this_contact As Contact, ByVal these_addresses As System.Linq.IQueryable(Of Address))
        ' TODO: Complete member initialization -this was added by the framework for me when I tried to call this class - I don't know what to do here - resources? 
        _this_contact = this_contact
        _these_addresses = these_addresses
    End Sub

    Public ReadOnly Property Contact As Contact
        Get
            Return _this_contact
        End Get
    End Property

    Public ReadOnly Property Addresses As System.Linq.IQueryable(Of Address)
        Get
            Return _these_addresses
        End Get
    End Property

End Class
...