2010-07-11 105 views
1

編輯一次:發送兩個模型到一個視圖中的.Net在VB

所以看起來我已經想通了地址部分也是如此,在I類有:

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 

所以我:

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:未將對象引用設置爲一個對象的實例。

它不能爲空...請幫我找出TODO

========================== ================================================== ===== ORIGINALPOST:

這是我的第一個.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'. 

這樣就OK了我試過:

Inherits="System.Web.Mvc.ViewPage" 

它拋出和錯誤的位置:

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

當然,所以我錯了控制器?我知道我不能只有System.Web.Mvc.ViewPage(IEnumerable(Of TotallyAwesomeCRM.Contact)),它將不得不接受更多。我嘗試使用Model.FirstName部分表示Contact.FirstName,但是當我開始編寫Contact時,這並沒有出現在下拉列表中。我可以在其他語言中輕鬆完成這項工作,.Net似乎是一款不同的球類遊戲。請幫忙!

+0

請保持像 「VB的Visual Basic 2010的LINQ to SQL」 標記出的稱號。只要將它們留在標籤中即可。 – 2010-07-11 20:44:42

+0

好吧我的意思是Visual Studio,我並沒有試圖使它成爲可搜索的,我認爲那些事情知道能夠回答這個問題是重要的,但是,我對.net是全新的,所以可能不會。 – KacieHouser 2010-07-11 20:49:44

+0

讓他們在標籤中,他們非常可搜索。但它使標題可讀。 – 2010-07-12 05:04:19

回答

1

你不需要「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 
+0

所以我不需要爲每個聯繫人字段創建一個屬性?我有這樣的地址工作,但我爲每個聯繫領域創建了一個屬性,它的工作原理,但如果我不必這樣做的話,它是很多額外的編碼。 – KacieHouser 2010-07-13 18:30:07

+0

正確。您只需在您的視圖模型中爲聯繫人和地址添加一個媒體資源。然後在你看來,你要解決所需要的財產拋出。例如model.Contact.FirstName,model.Addresses(0).Country。 – 2010-07-14 00:20:28

相關問題