在mvc模式中,controller层怎样将查询的结果(一张表),返回到另一个视图层。
具体情况是这样的:如果不返回另一个视图层的话,本视图层需要加IEnumerable.例如:(@model IEnumerable<MVCTEST.Models.Web客户订单>)但是在这个呈现查询结果的这个界面中有两个查询条件,这两个查询条件需要先绑定数据,绑定数据的处理方法是用DropDownListFor绑定。做法如下:
1 视图层:(view) 2 3 @model WebStuChooseCourse.Models.course 4 5 <td>学院:</td> 6 <td>@Html.DropDownListFor(m =>m.major.SchoolID, ViewData["dtXueYuan"] as IEnumerable<SelectListItem>)</td> 7 8 控制层:(controller) 9 10 #region 绑定下拉框 11 var dtXueYuan = from a in ef.school select a; 12 13 List<SelectListItem> itemXueYuan = new List<SelectListItem>(); 14 foreach (school item in dtXueYuan) 15 { 16 itemXueYuan.Add(new SelectListItem { Text = item.SchoolName, Value = item.SchoolID.ToString() }); 17 } 18 19 ViewData["dtXueYuan"] = itemXueYuan;
这个时候,如果加了:IEnumerable 也就是第三行代码变成(@model IEnumerable<MVCTEST.Models.Web客户订单>)
这时这个地方就会出错第六行代码这个地方(m =>m.major.SchoolID, ViewData["dtXueYuan"] as IEnumerable<SelectListItem>)
所以我想把它弄成两个界面,查询的条件放一个界面,查询的结果放另一个界面。在controller层中根据查询条件我的处理时这样的
var v = (from a in ef.course join b in ef.major on a.MajorID equals b.MajorID join c in ef.school on b.SchoolID equals c.SchoolID where c.SchoolID == schoolID select a).ToList<course>();//course,major,school是数据库中的三个表
这个v的结果该怎么返回到另一个视图层显示出来。
return View(model);model即使实体,有何不可?
其他思路:将页面分为上下2个div(查询一个,数据展示一个),然后查询后,请求分部视图(数据展示),然后用$("#divContent").html(分部视图),这样的方式,还实现了Ajax版本的查询。
谢谢你的回复!我现在的解决办法是将页面分成了两个(查询一个,数据展示一个),查询的条件是这样获得:
1 <div style="margin-top:10px;margin-left:10px;"> 2 院系:@Html.DropDownList("dtXueYuan", ViewData["dtXueYuan"] as IEnumerable<SelectListItem>, "---选择院系---", new { id = "dtXueYuan" }) 3 <font style="margin-left:20px">专业:</font>@Html.DropDownList("dtZhuanYe", ViewData["dtZhuanYe"] as IEnumerable<SelectListItem>, "---选择专业---", new { id = "dtZhuanYe" }) 4 <input type="button" value="查询" id="btnSelectCourse" onclick=" getCourse()" style="margin-left:20px"/> </div>
根据查询条件,返回到controller层的处理是:
<script type="text/javascript"> function getCourse() { $.getJSON("/Stu/ChooseCourse?SchoolID=" + $("#dtXueYuan").val() + "&MajorID=" + $("#dtZhuanYe").val(), function (data) { $("#dtCourse").empty(); $.each(data, function (i) { $("#dtCourse").append("<tr>" +....."</tr>") }); }); }
@wj704: 嗯,性质是一眼的。只不过你是将数据扔到客户端,然后客户端组合的。这样的形式,服务器只需要提供数据,不需要生成页面,呵呵~