2015-02-19 1 views
1

J'ai du mal à comprendre comment afficher une variable configurée dans mon fichier "Modèle" (puis renseignée dans mon fichier "Service" dans mon fichier "View".) StudentInfoModel:Variables d'affichage MVC à partir du modèle

using System; 
using System.ComponentModel.DataAnnotations; 
using System.Data.Entity; 
using System.Globalization; 

namespace SAAS.Models 
{ 
    public class StudentInfo 
    { 
     public StudentInfo(int studentID, string name, string ssan, DateTime birthdate, string address, string homePhone, string enrollmentType, string diplomaGED, string cellPhone, string sex, string race, string altName, string altRelation, string altPhone, string altAddress, DateTime altDateUpdated, string altUpdatedBy, string payStatus, string regionalWaiver, string previousResident, DateTime lastStatusChange, DateTime enrollmentDate, DateTime actEnrollmentDate, DateTime arrivalDate, DateTime atEnrollmentDate, string gedStatus, string gedState, DateTime gedDate, string vocationStatus, DateTime separationDate, string sepAddress, string sepPhone) 
     { 
      StudentID = studentID; 
      Name = name; 
      SSAN = ssan; 
      Birthdate = birthdate.ToString("dd MMMM yyyy", CultureInfo.InvariantCulture); 
      Address = address; 
      HomePhone = homePhone; 
      EnrollmentType = enrollmentType; 
      DiplomaGED = diplomaGED; 
      CellPhone = cellPhone; 
      Sex = sex; 
      Race = race; 
      AltName = altName; 
      AltRelation = altRelation; 
      AltPhone = altPhone; 
      AltAddress = altAddress; 
      AltDateUpdated = altDateUpdated.ToString("dd-MMMM-yyyy", CultureInfo.InvariantCulture); 
      AltUpdatedBy = altUpdatedBy; 
      PayStatus = payStatus; 
      RegionalWaiver = regionalWaiver; 
      PreviousResident = previousResident; 
      LastStatusChange = lastStatusChange.ToString("dd MMMM yyyy", CultureInfo.InvariantCulture); 
      EnrollmentDate = enrollmentDate.ToString("dd MMMM yyyy", CultureInfo.InvariantCulture); 
      ActEnrollmentDate = actEnrollmentDate.ToString("dd MMMM yyyy", CultureInfo.InvariantCulture); 
      ArrivalDate = arrivalDate.ToString("dd MMMM yyyy", CultureInfo.InvariantCulture); 
      AtEnrollmentDate = atEnrollmentDate.ToString("dd MMMM yyyy", CultureInfo.InvariantCulture); 
      GedStatus = gedStatus; 
      GedState = gedState; 
      GedDate = gedDate.ToString("dd MMMM yyyy", CultureInfo.InvariantCulture); 
      VocationStatus = vocationStatus; 
      SeparationDate = separationDate.ToString("dd MMMM yyyy", CultureInfo.InvariantCulture); 
      SepAddress = sepAddress; 
      SepPhone = sepPhone; 
     } 

     [Key] 
     public int StudentID { get;set; } 
     public string Name { get; set; } 
     public string SSAN { get; set; } 
     public string Birthdate { get;set; } 
     public string Address { get;set; } 
     public string HomePhone { get;set; } 
     public string EnrollmentType { get;set; } 
     public string DiplomaGED { get;set; } 
     public string CellPhone { get;set; } 
     public string Sex { get; set; } 
     public string Race { get;set; } 
     public string AltName { get;set; } 
     public string AltRelation { get;set; } 
     public string AltPhone { get;set; } 
     public string AltAddress { get;set; } 
     public string AltDateUpdated { get;set; } 
     public string AltUpdatedBy { get;set; } 
     public string PayStatus { get;set; } 
     public string RegionalWaiver { get;set; } 
     public string PreviousResident { get;set; } 
     public string LastStatusChange { get;set; } 
     public string EnrollmentDate { get;set; } 
     public string ActEnrollmentDate { get;set; } 
     public string ArrivalDate { get;set; } 
     public string AtEnrollmentDate { get;set; } 
     public string GedStatus { get;set; } 
     public string GedState { get;set; } 
     public string GedDate { get;set; } 
     public string VocationStatus { get;set; } 
     public string SeparationDate { get;set; } 
     public string SepAddress { get;set; } 
     public string SepPhone { get;set; } 
    } 
} 

StudentInfoService:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using SAAS.Models; 

namespace SAAS.Services 
{ 
    public class StudentInfoService 
    { 
     private static readonly List<StudentInfo> StudentInfos; 

     static StudentInfoService() 
     { 
      StudentInfos = new List<StudentInfo> 
      { 
       new StudentInfo(87654321, "John Doe", "123-45-6789", new DateTime(1986, 3, 29), "1234 Oak Street, Destin, FL", "(210) 555-1212", "O", "Y", "(210) 555-1212", "M", "W", "Joyce Doe", "Mother", "610-555-5555", "123 Magnolia St., Biloxi, MS 21818", new DateTime(2014, 9, 28), "Spacely Sprocket", "1-Normal", "N", "N", new DateTime(2014, 9, 18), new DateTime(2014, 4, 15), new DateTime(2014, 4, 15), new DateTime(2014, 4, 15), new DateTime(2014, 4, 15), "Passed", "NY", new DateTime(2013, 2, 3), "3 Trainee", new DateTime(2014, 12, 12), "123 Maple St., Apt 62, Anytown, NY 12345", "(555) 555-1111") 
      }; 
     } 

     public List<StudentInfo> GetStudentInfos(int start, int length) 
     { 
      return FilterStudentInfo().Skip(start).Take(length).ToList(); 
     } 

     public int Count() 
     { 
      return FilterStudentInfo().Count(); 
     } 

     public IQueryable<StudentInfo> FilterStudentInfo() 
     { 
      IQueryable<StudentInfo> results = StudentInfos.AsQueryable(); 
      return results; 
     } 
    } 
} 

Infos (la vue):

@model SAAS.Models.StudentInfo 
<link href="~/Content/info.css" rel="stylesheet" /> 
@{ 
    ViewBag.Title = "Student - Info"; 
    ViewBag.SubTitle = "General Info"; 
} 

@Html.Partial("_StudentNavPartial") 
@Html.Partial("_StudentSearchBar") 
<div class="container-fluid left"> 
    <h4>@ViewBag.SubTitle</h4> 
<div class="outline"> 
    <table id="General" class="borderless"> 
     <tr> 
      <td><strong>Birthdate: </strong></td> 
      <td><strong>Enrollment Type: </strong></td> 
      <td><strong>Sex: </strong></td> 
      <td><strong>Race: </strong></td> 
     </tr> 
     <tr> 
      <td><strong>Address: </strong></td> 
      <td><strong>Diploma/GED: </strong></td> 
     </tr> 
     <tr> 
      <td><strong>Home Phone: </strong></td> 
      <td><strong>Cell Phone: </strong></td> 
     </tr> 
    </table> 
    <br /> 
    <h5>Alternate Addresses</h5> 
    <table id="AlternateAddresses" class="table table-striped table-bordered table-hover text-nowrap"> 
     <thead> 
      <tr> 
       <th data-column="AltName" class="text-center" id="TDtooltip" data-toggle="tooltip" data-placement="bottom" data-original-title="Alternate Contact Name" data-container="body">Contact Name</th> 
       <th data-column="AltRelation" class="text-center" id="TDtooltip" data-toggle="tooltip" data-placement="bottom" data-original-title="Alternate Contact Relation" data-container="body">Relation</th> 
       <th data-column="AltPhone" class="text-center" id="TDtooltip" data-toggle="tooltip" data-placement="bottom" data-original-title="Alternate Contact Phone Number" data-container="body">Phone</th> 
       <th data-column="AltAddress" class="text-center" id="TDtooltip" data-toggle="tooltip" data-placement="bottom" data-original-title="Alternate Contact Address" data-container="body">Address</th> 
       <th data-column="AltDateUpdated" class="text-center" id="TDtooltip" data-toggle="tooltip" data-placement="bottom" data-original-title="Date Alternate Contact Updated" data-container="body">Date Updated</th> 
       <th data-column="AltUpdatedBy" class="text-center" id="TDtooltip" data-toggle="tooltip" data-placement="bottom" data-original-title="Who Updated Alternate Contact Information" data-container="body">Updated By</th> 
      </tr> 
      </thead> 
    </table> 
    </div> 
    <br /> 
    <h4>Enrollment Info</h4> 
    <div class="outline"> 
     <table id="enrollmentInfo" class="borderless"> 
      <tr> 
       <td><strong>Student Pay Status: </strong></td> 
       <td><strong>Date Status Last Change: </strong></td> 
       <td></td> 
      </tr> 
      <tr> 
       <td><strong>Regional Waiver: </strong></td> 
       <td><strong>Enrollment Date: </strong></td> 
       <td><strong>Arrival Date: </strong></td> 
      </tr> 
      <tr> 
       <td><strong>Previous Resident: </strong></td> 
       <td><strong>ACT Enrollment Date: </strong></td> 
       <td><strong>AT Enrollment Date: </strong></td> 
      </tr> 
     </table> 
     <br /> 
     <h5>Education</h5> 
     <table id="education"> 
      <tr> 
       <td><strong>GED Status: </strong></td> 
       <td><strong>GED State: </strong></td> 
       <td><strong>GED Date: </strong></td> 
       <td><strong>Vocation Status: </strong></td> 
      </tr> 
     </table> 
     <br /> 
     <h5>Separation</h5> 
     <table id="separation"> 
      <tr> 
       <td><strong>Date: </strong></td> 
       <td><strong>Address: </strong></td> 
       <td><strong>Phone: </strong></td> 
      </tr> 
     </table> 
    </div> 
</div> 

@section scripts 
{ 
    @Scripts.Render("~/bundles/dataTables") 
<script type="text/javascript"> 

    $.extend($.fn.dataTable.defaults, { 
      'pagingType': 'full_numbers', 
      'pageLength': 2, 
      'language': { 
       'paginate': { 
        'first': '&laquo;', 
        'last': '&raquo;', 
        'previous': '&lsaquo;', 
        'next': '&rsaquo;' 
       }, 
      }, 
      //'dom': '<"top"f>rt<"bottom"<"pull-left"l><"pull-right"i>p<"clear">>', 
      'dom': '<"top">rt<"bottom"<"pull-left"><"pull-right"><"clear">>', 
      'initComplete': function (settings, json) { 
       $('.dataTables_filter input[type=search]').attr('placeholder', 'Search'); 
      } 
     }); 
    $('#AlternateAddresses').dataTable({ 
     'ajax': { 
      type: 'POST', 
      url: '@Url.Action("GetData", "StudentInfo")', 
      //data: function(d) { 
      //} 
      "bPaginate": false, 
     }, 
     columns: [ 
      { 
       data: 'AltName', 
       sortable: true, 
       className: "text-left" 
      }, 
      { 
       data: 'AltRelation', 
       sortable: true, 
       className: "text-left" 
      }, 
      { 
       data: 'AltPhone', 
       sortable: true, 
       className: "text-left" 
      }, 
      { 
       data: 'AltAddress', 
       sortable: true, 
       className: "text-left" 
      }, 
      { 
       data: 'AltDateUpdated', 
       sortable: true, 
       className: "text-left" 
      }, 
      { 
       data: 'AltUpdatedBy', 
       sortable: true, 
       className: "text-left" 
      } 
     ], 
     //jQueryUI: true, 
     sort: true, 
     ordering: true, 
     order: [0, 'AltName'], 
     processing: true, 
     serverSide: true 
    }); 
    $('[data-toggle="tooltip"]').tooltip({ 
     delay: 0, 
     track: true, 
     fade: 100 
    }); 
    </script> 
} 

Mon contrôleur est:

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Linq; 
using System.Net; 
using System.Web; 
using System.Web.Mvc; 
using SAAS.Models; 
using SAAS.Services; 

namespace SAAS.Controllers 
{ 
    public class StudentInfoController : Controller 
    { 

     // GET: StudentInfo 
     public ActionResult Info() 
     { 
      return View(); 
     } 

     public JsonResult GetData(DTParameters dtModel, FilterViewModel filterModel) 
     { 
      try 
      { 
       List<StudentInfo> data = new StudentInfoService().GetStudentInfos(dtModel.Start, dtModel.Length); 
       int count = new StudentInfoService().Count(); 
       DTResult<StudentInfo> result = new DTResult<StudentInfo> 
       { 
        draw = dtModel.Draw, 
        data = data, 
        recordsFiltered = count, 
        recordsTotal = count 
       }; 
       return Json(result); 
      } 
      catch (Exception ex) 
      { 
       return Json(new { error = ex.Message }); 
      } 
     } 
    } 
} 

Donc ce que je suis en train de faire est de mettre la « naissance » « EnrollmentType », etc variables dans les tableaux qui ne sont pas DataTables (« Général », « enrollmentInfo », etc.), il affiche, par exemple:

Date de naissance: 4/29/1994

alors, comment puis-je référence et afficher ces variables? Merci!

Répondre

1

À partir de votre vue en supposant qu'il est rasoir vous simplement faire ce qui suit:

Birthdate: @Model.Birthdate 

Pour initialiser votre service, vous pouvez utiliser l'injection de dépendance au sein de votre contrôleur.

Cela impliquerait:

  • Le choix et l'installation d'un conteneur DI
  • Création d'un constructeur sur votre contrôleur qui accepte le service et l'assigne à une variable en lecture seule

Sans voir votre contrôleur Il est difficile de donner un exemple concret ou de savoir quelle DI vous prenez.

Il vaut la peine d'avoir une lecture de l'exemple suivant qui montre les bases de la façon de faire exactement cela.

MSDN dependency injection article

ps Vous n'avez pas besoin de créer le constructeur de cette manière.

Vous pouvez simplement créer l'objet StudentInfo avec initializers comme suit (en ajoutant tous les champs nécessaires):

new StudentInfo { StudentID = 1, Name = "A Name" }; 

MSDN object initializer reference

Mise à jour

je simplifier en bref exemples.

D'abord, je refactoriser votre service pour supprimer les méthodes statiques et les champs que vous n'en avez pas besoin. Demandez à vos méthodes de retourner les collections.

Extrayez une interface pour votre service, c'est-à-dire IStudentInfoService en exposant les méthodes.

Ajoutez un constructeur à votre contrôleur qui y injecte le service.

public class StudentInfoController : Controller 
{ 
private readonly IStudentInfoService _studentService; 

    public StudentInfoController(IStudentInfoService studentService) 
    { 
     _studentService = studentService; 
    } 

    // GET: StudentInfo 
    public ActionResult Info() 
    { 
     var model = _studentService.FilterStudentInfo(); 
     return View(model); 
    } 

Enfin installer un DI et la configuration du programme d'amorçage (les étapes de l'unité sont dans l'article ci-dessus).

+0

qui me donne une 'System.NullReferenceException'. L'information supplémentaire est: "La référence d'objet n'est pas définie sur une instance d'un objet." –

+0

@JosiahNusbaum J'ai ajouté une note et un article qui vous orienteront dans la bonne direction. Bonne chance. :) – hutchonoid

+0

D'accord, merci! J'aurais dû ajouter le contrôleur, ma faute! Je l'ai ajouté à l'article original si cela pourrait vous aider à être plus précis par exemple? Je travaille à la compréhension de l'article d'injection, mais j'apprends mieux en voyant des exemples! Merci pour votre aide, c'est vraiment apprécié! –