2

我正在从使用 linq 到 sql 的 theee 表中获取结果,但我无法使用视图中的值,我如何做到这一点,因为我是 mvc 的新手

这是我的控制器代码:

public ActionResult Grid()
{
    ViewBag.Message = "Your Grid page.";

    bc_limsEntities objbc_limsDBContext = new bc_limsEntities();


    var result = from b in objbc_limsDBContext.dc_tpatient_bookingm
                  join d in objbc_limsDBContext.dc_tpatient_bookingd on b.bookingid equals d.bookingid
                  join t in objbc_limsDBContext.dc_tp_test on d.testid equals t.TestId

                  where b.bookingid == 41239 && d.ProcessID == 0006 && t.SubdepartmentId == 16

                  select new {b.bookingid,
                              d.bookingdid,
                              d.testid,
                              t.Test_Name,
                              t.procedureid,
                              t.ClinicalUse,
                              t.AutomatedText};

    ViewBag.Result = result.ToList();


    return View(result);
}

我这样做是因为:

@foreach(var item in ViewBag.Result)
{
    <h1>@item</h1>
}
4

3 回答 3

4

我通过这种方式解决了自己的问题:

public class ResultSet
{
    public long bookingid { get; set; }
    public long bookingdid { get; set; }
    public long testid { get; set; }
    public string Test_Name { get; set; }
    public long procedureid { get; set; }
    public string ClinicalUse { get; set; }
    public string AutomatedText { get; set; }

}

在控制器中:

bc_limsEntities objbc_limsDBContext = new bc_limsEntities();


        var result = from b in objbc_limsDBContext.dc_tpatient_bookingm
                      join d in objbc_limsDBContext.dc_tpatient_bookingd on b.bookingid equals d.bookingid
                      join t in objbc_limsDBContext.dc_tp_test on d.testid equals t.TestId

                      where b.bookingid == 41239 && d.ProcessID == 0006 && t.SubdepartmentId == 16

                      select new {b.bookingid,
                                  d.bookingdid,
                                  d.testid,
                                  t.Test_Name,
                                  t.procedureid,
                                  t.ClinicalUse,
                                  t.AutomatedText};

        List<ResultSet> resultList = new List<ResultSet>();

        foreach (var temp in result)
        {
            ResultSet objResultSet = new ResultSet();

            objResultSet.bookingid = temp.bookingid;
            objResultSet.bookingdid = temp.bookingdid;
            objResultSet.testid = temp.testid;
            objResultSet.Test_Name = temp.Test_Name;
            objResultSet.procedureid = long.Parse(temp.procedureid.ToString());
            objResultSet.ClinicalUse = temp.ClinicalUse;
            objResultSet.AutomatedText = temp.AutomatedText;

            resultList.Add(objResultSet);
        }

        ViewBag.Result = resultList;
return View(resultList);

在这样的视图中:

@foreach(var item in Model)
          {
              <tr>
              <td class="t_center"><input type="checkbox" id="c14" name="cc" /><label for="c14"><span></span></label></td>
              <td>@item.bookingid</td>
              <td>@item.bookingdid</td>
              <td>@item.testid</td>
              <td>@item.Test_Name</td>
              <td>@item.procedureid</td>
              <td>@item.ClinicalUse</td>
              <td>@item.AutomatedText</td>

              </tr>                  
          }
于 2013-06-14T12:25:31.433 回答
3

不要使用视图包,使用视图模型。在这种情况下,您已经results作为视图模型传递,因此您需要在视图页面的顶部声明模型,如下所示:

@model List<Item>

(或任何类型的对象results

然后你可以像这样使用它:

@foreach(var item in Mode)
{
    <h1>@item.Property</h1>
}

通常,您将拥有一个包含许多属性的专用 View Model 类,其中之一就是您的results列表,如果您喜欢冒险,请尝试使用它!

编辑:因为您正在动态创建一个您不知道类型的自定义对象,所以您应该做的是创建一个Item包含您需要的所有字段的类(例如),然后从您的三个表中填充该类,然后使用它。

于 2013-06-14T11:46:22.477 回答
-1

试试类似的东西怎么样:

@foreach(var item in ViewBag.Result)
{
    <h1>@item.bookingid</h1>
}

如果您当然想坚持使用 viewbag,但 musefan 关于使用视图模型的建议要干净得多,而且您应该真正做些什么。

于 2013-06-14T11:48:30.000 回答