2016-07-26 6 views
-1

У меня есть вид MVC, который мне нужно обновить. Текущий код выглядит следующим образом:Как повторить функцию отображения ссылок в MVC?

View -

@{ 
    ViewBag.Title = "TestView"; 

} 

<div class="row"> 
    <div class="col-lg-12"> 
     <h4>Current Report 1</h4> 
     @if (@ViewBag.DocID != null) 
     { 
      <p><a href="javascript:void(0);" onclick="DownloadFile('@ViewBag.DocID');" title="@ViewBag.DocName">@ViewBag.DocName</a> - <small>@ViewBag.UploadDateTime</small></p> 
     } 
     else 
     { 
      <p>There is not a current Report in the system at this time.</p> 
     } 


    </div> 
</div> 

Controller -

public ActionResult TestView() 
    { 
     Report report = new Report(); 
     SearchCriteria sc = new SearchCriteria(); 

     sc.User = SessionData.User; 
     sc.DocType = 1; 
     report = DAL.GetReportWithTypeAndUser(sc); 

     if(report != null) 
     { 
      ViewBag.DocID = report.DocID; 
      ViewBag.DocName = report.DocName; 
      ViewBag.UploadDateTime = report.UploadDateTime; 
     } 

     return View(); 
    } 

Этот код прекрасно работает так, как оно есть. Но мне нужно повторить это для нескольких типов отчетов. В моем контроллере я в настоящее время посылаю DocType = 1, но мне нужно будет отправить 2, 3, 4 и т. Д. И вернуть несколько разных типов и перечислить их так же, как в настоящее время.

У меня возникли трудности с лучшим способом сделать это. Любая помощь будет оценена!

ответ

1

Не используйте ViewBag. Вместо этого используйте ViewModels.

ViewModel:

public class ReportsViewModel 
{ 
    public ICollection<Report> Reports; 
} 

Entity:

public class Report 
{ 
    public int DocID { get; set; } 
    public string DocName { get; set; } 
    public DateTime UploadDateTime { get; set; } 
} 

Контроллер:

public ActionResult TestView() 
{ 
    // get your reports with different types 
    var reports = GetYourReports(); 

    var vm = new ReportsViewModel 
    { 
     Reports = reports 
    } 

    return View(vm); 
} 

Вид:

@model ReportsViewModel 

@{ 
    ViewBag.Title = "TestView"; 
} 

<div class="row"> 
    <div class="col-lg-12"> 
     @if (Model.Reports.Length > 0) 
     { 
      @foreach (var report in Models.Reports) 
      {      
       <p><a href="javascript:void(0); "onclick="DownloadFile('@report.DocID');" title="@report.DocName">@report.DocName</a> - <small>@report.UploadDateTime</small></p> 
      } 
     } 
     else 
     { 
      <p>There is not a current Report in the system at this time.</p> 
     } 
    </div> 
</div> 
+0

Это ва именно то, что мне нужно. Большое спасибо! – LDWisdom

0

Почему бы вам не создать View Model и не привязать ее к этому виду?

public class Report 
{ 
    public int DocType {get; set;} 
    public int DocId {get; set;} 
    public string DocName {get; set;} 
    // Other properties 
} 

Затем вы можете связать свой взгляд на эту модель, добавив @model Report в верхней части представления, и получить доступ к свойствам, делая @Model.DocType и т.д. в представлении. Вы можете даже написать более сложную логику в представлении, настроив ее на основе DocType.

В контроллере вы можете создать экземпляр класса Report и присвоить соответствующие значения его свойствам и передать этот объект View при его создании.

 Смежные вопросы

  • Нет связанных вопросов^_^