在viewbag中传递数据

时间:2012-08-19 15:42:09

标签: asp.net asp.net-mvc-3

我想从表db.instantservices中检索小时列 我无法执行此操作。我正在使用EF code,在浏览器中我可以看到此详细信息页面,但不能查看viewbag中的信息。提前感谢

Classes-:


 public class InstantService
{
    public int InstantServiceID { get; set; }
    public string ServiceName { get; set; }
    public string InstantUserName { get; set; }
    public string Title { get; set; }``
    public string Description { get; set; }
    public int Hours { get; set; }
    public int InstantID { get; set; }
    public Instants CurrentInstant { get; set; }
    public virtual ICollection<Review> Reviews { get; set; }
}


public class Review
{
    public int ReviewID { get; set; }
    public InstantService Service { get; set; }
    public int InstantServiceID { get; set; }
    public string MyReview{ get; set; }
}

但是当使用这段代码时,我没有任何价值。 代码 - :

public ViewResult Details(int id)
         {
           Review review = db.ReviewDB.Find(id);
            ViewBag.ServiceHours = db.InstantServiceDB.Select(model => model.Hours);
            return View(review);
          }      

在视图代码中:

                 @{
          ViewBag.Title = "Details";
                  }


             <fieldset>
            <legend>Review</legend>

             <div class="display-label">Service</div>
             <div class="display-field">
             @Html.DisplayFor(model => model.Service.Title)
             </div>

             <div class="display-label">MyReview</div>
             <div class="display-field">
             @Html.DisplayFor(model => model.MyReview)
             </div>
             </fieldset>

             <p>
             @Html.ActionLink("Edit", "Edit", new { id=Model.ReviewID }) |
             @Html.ActionLink("Back to List", "Index")
             </p>
             <div>
             Total Hours required were -:
             <div>
             @ViewBag.ServiceHours
             </div>
             </div>

2 个答案:

答案 0 :(得分:0)

此方法(Linq Select )返回 IEnumerable

db.InstantServiceDB.Select(model => model.Hours);

当您将其直接转储到Razor视图中时,它将使用您不想要的 ToString 进行渲染。如果您期望来自该数据库调用的单个结果,那么您可以使用 FirstOrDefault 来获取实际值:

ViewBag.ServiceHours = db.InstantServiceDB
    .Where(model => model.ForeignKey == id)
    .Select(model => model.Hours)
    .FirstOrDefault();

答案 1 :(得分:0)

目前尚不清楚您希望显示ViewBag.ServiceHours数据的确切程度。由于赋值给定它是一个整数集合,因此您可以显示它,例如以这种方式在视图中:

<div>
    @(String.Join(", ", ((IEnumerable<int>) ViewBag.ServiceHours).Select(x => x.ToString())))
</div>

这将显示以逗号分隔的所有值。您可以调整格式以满足您的需求。