2015-07-31 11 views
7

Tworzę aplikację MVC, w której wysyłam wiadomość e-mail do JIRA. Początkowo działałem, gdy miałem TypType w widoku po prostu IssueTable, ale gdy zmieniłem go zbyt ModelType ViewModelClass.ViewModel przestał działać poprawnie.Błąd wartości pustej podczas próby utworzenia zmiennej równej viewmodel o wartości

W regulatorze:

Public Function SubmitIssue(issuetable As IssueTable, test As IssueTracker.ClientUserProjectIssue) As ActionResult 

Dim mail As New MailMessage() 
mail.Subject = issuetable.IssueSummary 
Dim body As String = test.iTable.IssueDescription 
mail.Body = body 
smtp.Send(mail) 

W widoku:

@ModelType IssueTable 

@Html.EditorFor(Function(model) model.IssueSummary) 
@Html.EditorFor(Function(model) model.IssueDescription) 

Ten początkowo działało, ale musiałem mieć wiele tabel do wysyłania danych, więc stworzyłem ViewModel tak:

Public Class ViewModel 
    Public proTableList As List(Of ProjectType) 
    Public cTableList As List(Of ClientTable) 
    Public proTable As ProjectType 
    Public iTable As IssueTableViewModel 
End Class 

Public Class IssueTableViewModel 
    Public IssueSummary As String 
    Public IssueDescription As String 
End Class 

W widoku wyświetlane są następujące informacje:

@ModelType IssueTracker.ViewModel 

@Html.EditorFor(Function(model) model.iTable.IssueSummary) 
@Html.EditorFor(Function(model) model.iTable.IssueDescription) 

Teraz problem leży w moim w kontrolerze, ponieważ sposób staram się zapełnić opis i podsumowanie takiego mam zerowy błąd:

Public Function SubmitIssue(issuetable As IssueTable, test As IssueTracker.ClientUserProjectIssue) As ActionResult 

Dim mail As New MailMessage() 
mail.Subject = test.iTable.IssueSummary 
Dim body As String = test.iTable.IssueDescription 
mail.Body = body 
smtp.Send(mail) 

Jak widać oprócz oczywiste Klasa ViewModel dodana do kodu jest dokładnie taka sama.

To oczywiście nie może być poprawny sposób, aby uzyskać wartość w zmiennej/e-mail za pomocą viewModel, czy ktoś wie, jak mogę to zrobić poprawnie?

+0

nie zobaczyć mail.to i mail.from są one zestaw gdzie indziej? – EJD

+0

Tak To jest tylko prosty ciąg do adresu e-mail i działa, więc zostawiłem go tylko problemy z ciałem i podmiotem –

Odpowiedz

2

Trzeba usunąć BindAttribute od ciebie metody kontrolera, lub zmienić go za <Bind(Include:="iTable")>

Twój model widok nie zawiera właściwości nazwanych IssueID, IssueSummary i IssueDescription, tylko właściwość o nazwie iTable (który z kolei zawiera te nieruchomości).

Jednak korzystanie z modelu widoku i modelu widoku powinno zawierać tylko właściwości potrzebne w widoku, co oznacza, że ​​nie należy potrzebować metody BindAttribute.

Zakładając wprowadzone zmiany tylko IssueSummary i IssueDescription właściwości IssueTable (jak na swój kod), wtedy twój widok model powinien być

Public Class ViewModel 
    Public proTableList As List(Of ProjectType) 
    Public cTableList As List(Of ClientTable) 
    Public proTable As ProjectType 
    // Public iTable As IssueTable // delete this 
    Public IssueSummary As String // add this 
    Public IssueDescription As String // add this 
End Class 
+0

Nadal dostaję błąd zerowy dla: Dim body As String = test.iTable.IssueDescription w moim wniosek, kiedy zmienię na lub wyjmij go. –

+0

Nie, chyba że masz inne błędy w kodzie. Stworzę aplikację DotNetFiddle, aby udowodnić to nieco później (ale kod będzie w języku C#) –

+0

Niestety, zapobiega to błędowi zerowemu, ale teraz wysyłana wartość jest po prostu pusta –