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层,也可以包装!

 

Models的声明可以在switch内部选择声明:

@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"); }
posted @ 2014-05-12 13:46  x_window  阅读(308)  评论(0编辑  收藏  举报