MVC4中使用ajax读取linq数据库。
最近在研究html5之后,又发现了一个新的东西MVC4.安装了visual studio 2012之后,直接可以建立MVC4 project.
1、new project ,选择 ASP.net MVC 4 Web Application=>Internet Application
2、结果是自动建立了Models/Views/Controllers等目录。
3、在Models目录上点击右键添加Linq to Sql classes
4、按照正常linq 添加模式,拖动数据库表
5、在Controllers目录下的或者自己添加一个或者使用已经存在的一个HomeControllers,在cs文件中,引入
using MvcModel.Models;这个是linq下的designer.cs中的namespace
6、在每一个调用的function中新建一个对象,或者建立一个统一的对象。
dataDataContext db = new dataDataContext();
下面即可读写数据库。
7、初期使用Index方法:
public ActionResult Index() { dataDataContext db = new dataDataContext(); return View(db.cgs.ToList()); }
对应的index.cshtml中引入:
@model IEnumerable<MvcModel.Models.cg>
内容可以使用Model写出:
<li id="oneli" class="one"> @foreach (var item in Model) { <ul> <li> @Html.DisplayFor(modelItem => item.xmmc)
</li> </ul> } </li>
这里每一个view似乎只能读取一种类的Model.
8、在这个页面中添加ajax.
a. MVC4中使用ajax的一种方法是:
@Ajax.ActionLink("Search", "Search",new{Xmmc="研究"}, new AjaxOptions{ UpdateTargetId="oneli", InsertionMode=InsertionMode.Replace, HttpMethod="POST" })
这里就存在一个问题就是不好传递DOM对象的内容到后台,有一个方法就是使用ViewBag,但是总感觉有点鸡肋。而且链接的点击也不太好看。虽然可以执行,但是被我否定了。
b.使用$.post或者$.get:
$.post(。。。success:..)
这里似乎不如ajax看起来直接。
c.使用$.ajax:
$.ajax({ type: "POST", data: { Xmmc: $("#Xmmc").val() },
url: "Home/Search", success: function (result) { $("#oneli").html(result); } });
9、上面的后台controllers返回的view必须使用:PartialViewResult否则就会多层嵌套。
Controllers右键添加PartialViewResult
10、public PartialViewResult Search(string Xmmc) { ViewBag.Message = "This is a test!"; dataDataContext db = new dataDataContext(); List<cg> listCg = db.cgs.Where(p => p.xmmc.IndexOf(Xmmc) >= 0).ToList(); ViewBag.listCg = listCg; return PartialView("_PartialSearch",listCg); }
在里面右键添加PartialView.这个View里也是一样添加Model类和显示:
@model IEnumerable<MvcModel.Models.cg>
@foreach (var item in Model) { <ul> <li> @Html.DisplayFor(modelItem => item.xmmc) </li> </ul> }
11、在母版页_layout.cshtml中做一下修改:
添加 @Scripts.Render("~/bundles/jqueryval")在@Scripts.Render("~/bundles/jquery")旁,即可。
研究发现Visual Studio 2012的MVC的View层,也可以包装!
@if(@ViewBag.flag=="cg") { { @model IEnumerable<MvcModel.Models.cg>
foreach (var item in Model) { <ul> <li> @Html.DisplayFor(modelItem => item.xmmc) </li> </ul> } } }
Controllers 里面判断即可:public PartialViewResult Search(string tableName,string Name) { ViewBag.flag = tableName;
switch(tableName) { case "cg": { dataDataContext db = new dataDataContext(); var listCg = db.cgs.Where(p => p.xmmc.IndexOf(Name) >= 0).ToList(); ViewBag.listCg = listCg; return PartialView("_PartialSearch", listCg); } case "lab": { dataDataContext db = new dataDataContext(); var listCg = db.labs.Where(p => p.labname.IndexOf(Name) >= 0).ToList(); ViewBag.listCg = listCg; return PartialView("_PartialSearch", listCg); } } return PartialView("_PartialSearch"); }