C # - Использование нескольких вызовов данных в представлении ASP.NET MVC 3 - PullRequest
2 голосов
/ 16 июня 2011

Я пытаюсь освоить ASP.NET MVC 3 с помощью бритвы и пока не могу освоить его.

Одна вещь, на которой я застрял - это попытка заставить работать несколько вызовов данных.

предыстория того, что я делаю.У меня есть страница, на которой будет отображаться информация о проекте (над которым я работал), но я также хочу показать прогресс этого проекта (это еще один вызов данных).Я не могу получить данные о прогрессе, чтобы показать.я попытался использовать viewbag, но получил:

System.Data.Objects.ObjectResult`1 [System.String]

Я использую хранимые процедуры с Entity Framework.

Я ценю помощь, ребята.

РЕДАКТИРОВАТЬ:

Вот грубый пример моей проблемы:

private SDMPREntities _db = new SDMPREntities();
public ActionResult Details(int id) { 
ViewData.Model = _db.ViewProjectDetails(id).ToList();
ViewBag.Progress = _db.ProjectProgress();
return View();
} 

РЕДАКТИРОВАТЬ2:

@ Джеймс Д'Анджело, да в поле зрения.Вот код бритвы:

@model IEnumerable<DeveloperManagerSharp.Models.Projects>

@{
ViewBag.Title = "Project Details";
Layout = "~/Views/Shared/project-ui.cshtml";
}

<div class="post">
<h3 class="title">
    Project Details</h3>
<div class="entry">
    <h4>
        Select a Project</h4>
    <p>
        Select a project below to see their progress or to update any of their properties.</p>
</div>
</div>

@foreach (var item in ViewData.Model)
{    
<div class="post">
    <h3 class="title">@item.project_name (@item.project_version) @ViewBag.Progress%</h3>
    <div class="meta">
        <div class="posted">
            @Html.ActionLink("Edit", "Edit", new { id = item.PID }) |
            @Html.ActionLink("Back to Projects", "Index")
        </div>
        @if (@item.project_completed == "1") {
            <div class="date">
                Project is Completed.
            </div>
            } else {
            <div class="date">
                Project is Under Work.
            </div>       
            }
    </div>
    <div class="entry">
        @if(@item.project_status == "0")
            {
            <span>Status: Planning</span><br />
            }
            else if(@item.project_status == "1")
            {
            <span>Status: Alpha</span><br />
            }
            else if(@item.project_status == "2")
            {
            <span>Status: Beta</span><br />
            }
            else if(@item.project_status == "3")
            {
            <span>Status: Release Candiate</span><br />
            }
            else if(@item.project_status == "4")
            {
            <span>Status: Active</span><br />
            }
            else if(@item.project_status == "5")
            {
            <span>Status: Maure</span><br />
            }
            else if(@item.project_status == "6")
            {
            <span>Status: Discontinued</span><br />
            }
        Starts: @item.project_sdate<br />
        Ends: @item.project_edate<br />
        <em>@item.project_desc</em>
    </div>
</div>
}

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

Вызов

_db.ProjectProgress();

Скорее всего, возвращает ObjectResult, представляющий коллекцию элементов.

Поэтому, когда вы пытались отобразить его в представлении с помощью

@ViewBag.Progress

Вызывается ToString (), который просто печатает тип.

Чтобы обойти это, вы хотите получить определенный результат из набора.Не зная вашей структуры данных, я могу рискнуть только предположением, например

_db.ProjectProgress().Single(p=>p.ProjectId == id)
0 голосов
/ 16 июня 2011

попробуйте следующее.

Код уровня данных

 public class ProjectDetailManager 
 {   
   public static List<ViewProjectDetail> GetProjectDetailById(int id)    
   {
       using(var dbContext = new SDMPREntities())
       {
          return dbContext.ViewProjectDetails(id).ToList();
       }    
    }

    public static ProjectProgress GetProjectProgress(int id)    
    {
       using(var dbContext = new SDMPREntities())
       {
          return dbContext.ProjectProgress().Where(x=>x.ProjectId ==id).FirstOrDefault();
       }    
    }

 }

Код контроллера:

public ActionResult Details(int id) 
{
  ViewData.Model = ProjectDetailManager.GetProjectDetailById(id); 
   ViewBag.Progress = ProjectDetailManager.GetProjectProgress(id);
   return View();    
}

Просмотреть код

     @model IEnumerable<ViewProjectDetail> 
    @{
        ViewBag.Title = "Project Details";
        Layout = "~/Views/Shared/_SiteContent.cshtml";
     }
@// not sure what your object look like but here an example 
    <h1>Project Status: @(ViewBag.Progress != null ? ViewBag.Progress.Status : string.Empty)</h1>

       @foreach(var item in Model) 
       {     
          //format display whatever 
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...