2016-04-25 12 views
0

Ich habe einige Code, der merkwürdig funktioniert und fragte mich, ob jemand anderes auf dieses Problem stoßen.Daten vom Modell nicht zur Ansicht

Ich habe eine Ansicht Modell, das Daten aus einer Datenbank über eine gespeicherte Prozedur und einem vb Objekt sammelt (nein, ich weiß nicht, vb ist das Vermächtnis)

Wenn ich das Programm die Daten ausführen gesammelt wird wie erwartet über Der Controller. Wenn ich es debugge, kann ich sehen, dass alle meine Parameter mit Informationen gefüllt sind. Wenn es jedoch um die Ansicht geht, heißt es, dass die Parameter null sind. Ich habe meinen Code enthalten

Modelle:

public class PersonIncomeViewModel 
{ 
    public string IncomeTypeDesc { get; set; } 
    public string IncomeDesc { get; set; } 
    public string Income { get; set; } 
} 

public class PersonIncomeListViewModel 
{ 
    public int? PersonId { get; set; } 
    public List<PersonIncomeListItem> Incomes { get; set; } 

    public PersonIncomeListViewModel() 
    { 
     Incomes = new List<PersonIncomeListItem>(); 
    } 
} 

    public class PersonLookupViewModel : Queue.QueueViewModel 
{ 
    public int Action { get; set; } 
    public bool ShowAdvancedFilters { get; set; } 

    //Person Search Variables 
    [Display(Name = @"Search")] 
    public string SpecialSearch { get; set; } 
    [Display(Name = @"Person Id")] 
    public int? PersonId { get; set; } 
    [Display(Name = @"Full Name")] 
    public string FullName { get; set; } 
    [Display(Name = @"SSN")] 
    public string SSN { get; set; } 
    public string AddressStatus { get; set; } 
    public string EmploymentStatus { get; set; } 

    public PersonIncomeViewModel Income { get; set; } 
    public List<PersonIncomeListItem> Incomes { get; set; } 



    public PersonLookupViewModel() 
    { 

     Income = new PersonIncomeViewModel(); 
     Incomes = new List<PersonIncomeListItem>(); 

    } 

} 

Controller:

public ActionResult _Income(int id) 
    { 
     var vm = new PersonLookupViewModel(); 

     var personManager = new dtPerson_v10_r1.Manager(ref mobjSecurity); 

     //var person = personManager.GetPersonObject((int)id, vIncludeIncomes: true); 
     var person = personManager.GetPersonObject(id, vIncludeIncomes: true); 

     var look = JsonConvert.SerializeObject(person.Incomes); 

     foreach (dtPerson_v10_r1.Income income in person.Incomes) 
     { 

      if (income.IncomeType_ID == 0) 
      { 
       var item = new PersonIncomeListItem 
           { 
            IncomeTypeDesc = "Unknown", 
            IncomeDesc = income.IncomeDesc, 
            Income = mobjFormat.FormatObjectToCurrencyString(income.Income) 
           }; 
       vm.Incomes.Add(item); 
      } 

      if (income.IncomeType_ID == 1) 
      { 
       var item = new PersonIncomeListItem 
       { 
        IncomeTypeDesc = "Alimony", 
        IncomeDesc = income.IncomeDesc, 
        Income = mobjFormat.FormatObjectToCurrencyString(income.Income) 
       }; 

       vm.Incomes.Add(item); 
      } 

      if (income.IncomeType_ID == 2) 
      { 
       var item = new PersonIncomeListItem 
       { 
        IncomeTypeDesc = "Child Support", 
        IncomeDesc = income.IncomeDesc, 
        Income = mobjFormat.FormatObjectToCurrencyString(income.Income) 
       }; 

       vm.Incomes.Add(item); 
      } 

     } 

     return PartialView(vm); 
    } 

Ausblick:

@using dtDataTools_v10_r1 
@using ds_iDMS.Models.Person 
@model ds_iDMS.Models.Person.PersonLookupViewModel 

@{ 
    var format = new dtDataTools_v10_r1.CustomFormat(); 

    var newInitials = (Model.Income.IncomeTypeDesc.First().ToString() + Model.Income.IncomeDesc.First().ToString() + Model.Income.Income.First().ToString()).ToUpper(); 
}  

    using (Html.DSResponsiveRow(numberOfInputs: ExtensionMethods.NumberOfInputs.TwoInputs)) 
    { 
     using (Html.DSCard(ExtensionMethods.Icon.CustomText, iconInitials: newInitials, color: ExtensionMethods.Colors.PrimaryBlue)) 
     { 
      <div>@Model.Income.IncomeTypeDesc</div> 
      <div>@Model.Income.IncomeDesc</div> 
      <div>@Model.Income.Income</div> 
     } 
    } 

Es gibt einige Erweiterungen, die wir aufgebaut haben, aber sie sind irrelevant für die Ausgabe

die Zeile, die Fehler aus ist dies eine:.

var newInitials = (Model.Income.IncomeTypeDesc.First() toString() + Model.Income.IncomeDesc.First() toString() + Modell. .Income.Income.First(). ToString()). ToUpper();

, die alle der Erweiterungsmethoden auf der Ansicht antreibt und wie ich den Debugger über sie alle Parameter lesen null laufen, aber wie ich schon sagte, wenn ich den Debugger ausführen und überprüfen Sie sie in der Steuerung sie richtig bestückt sind .

Traurig über den langen Post, aber ich wollte alle Details, um sicherzustellen, war es

+0

nicht bekommen, was Sie tun, ist "Einkommen" nicht sein soll dezimal? – jamiedanq

+0

Zuerst würde ich versuchen, den Code in eine normale Ansicht zu verschieben - nur um zu überprüfen, ob es sich um ein PartialView-Problem handelt. Zweitens würde ich das Objekt über ViewBag/ViewData übergeben, um zu überprüfen, ob es ein Problem ist, wie das Objekt übergeben wird oder ein generelles Problem mit dem Modell. Haben alle Eigenschaften im "Queue.QueueViewModel" einen get/set? – maltmann

+0

@maltmann - Ja, alle Eigenschaften von Queue.QueueViewModel haben richtige get/set in ihnen. Ich werde versuchen, es einfach über ViewBag zu übergeben, um das zu überprüfen. Aber wenn ich sie im direkten Fenster überprüfe, passiert es, aber alles ist möglich :-) – MaximusPrime

Antwort

0

Dies ist, wie die Object model passieren zu Ihrem Partial View

return PartialView("YourViewName", vm); 

oder mit dem Views Weg

return PartialView("~/YourView.cshtml", vm); 

BEARBEITEN

Versuchen Sie Ihre Aktion Methode wie dieser Ausgangs

var vm= new Person(); 
    vm.PersonLookupViewModel = new PersonLookupViewModel(); 
+0

Ich habe versucht, diese Jamiedanq und ich erhielt genau den gleichen Fehler. – MaximusPrime

+0

Sie müssen Ihr 'vm' Modell in' Person' einpacken und es übergeben – jamiedanq

+0

Weil 'Person'' PersonLookupViewModel' kapselt, wie Sie es auf Ihrer 'Ansicht' darstellen. Wenn nicht, wird es immer "null" sein – jamiedanq

0

Problem löste ich mit einigen meiner vb Objekte Probleme hatte und die vb Person auf sie einen Blick darauf werfen und sie fixiert sie.

Vielen Dank für all die Hilfe

EDIT Was das vb Objekt passieren mußte ist hatte, war zu neu geschrieben und meine Logik ganz gut, wie es am Anfang war. Ich markierte die eine Antwort auf meine Frage als die Antwort, weil es in echten MVC ohne Vb Objekte gewesen wäre, die perfekt funktioniert hätte

Verwandte Themen