ASP.NET MVC中 Jquery AJAX 獲取數據利用MVC模型綁定實現輸出


     在日常項目中我們經常使用ajax ,無論是webform 還是mvc ,jQuery確實是一個挺好的輕量級的JS框架,能幫助我們快速的開發JS應用,並在一定程度上改變了我們寫JavaScript代碼的習慣。jquery ajax 為我們實現ajax提供了一些非常方便的實現ajax的方法。我們利用ajax返回到前台的json字符串,需要我們自己去處理解析,很多時候我們需要自己手動的去拼html 字符串 很麻煩,那么有沒有簡單的方法呢,在MVC中,提供了一種機制模型綁定。

     在ASP.net MVC中,使用了一種稱之為“模型綁定”的機制,將模型對象與HTTP請求的數據通過Action方法的參數進行映射綁定,無論從簡單的數據或者到復雜的數據結構,應付模型綁定的一切工作,MVC框架都能游刃有余。在ajax的應用中,我們如何利用這個特性呢,我們可以把數據通過模型綁定 把數據綁定到視圖,然后再獲取視圖輸出的字符串,直接輸出即可。

我們首先定義一個ApplicationController 繼承 Controller 。在ApplicationController中定義如下:

 1  public class ApplicationController : Controller
 2     {
 3         protected string RenderPartialViewToString(string viewName, object model)
 4         {
 5             if (string.IsNullOrEmpty(viewName))
 6                 viewName = ControllerContext.RouteData.GetRequiredString("action");
 7 
 8             ViewData.Model = model;
 9 
10             using (var sw = new StringWriter())
11             {
12                 ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
13                 var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
14                 viewResult.View.Render(viewContext, sw);
15 
16                 return sw.GetStringBuilder().ToString();
17             }
18         }
19 
20     }


我們只需要傳入視圖名稱,和實體數據,就可以輸出我們定義好格式的字符串。

定義控制器 繼承 ApplicationController

 

 1  public class HomeController : ApplicationController
 2     {
 3         private static Users _usrs = new Users();
 4  
 5         public ActionResult Index()
 6         {
 7             return View(_usrs._usrList);
 8         }
 9 
10         public ActionResult Create()
11         {
12             return View();
13         }
14 
15         [HttpPost]
16         public ActionResult Create(UserModel item)
17         {
18             _usrs.Create(item);
19             return View();
20         }
21 
22         public ActionResult Edit(string id)
23         {
24             return View(_usrs.GetUser(id));
25         }
26 
27         [HttpPost]
28         public ActionResult Edit(UserModel um)
29         {
30             _usrs.Update(um);
31             return View();
32         }
33 
34         public ActionResult About()
35         {
36             return View();
37         }
38 
39         public ViewResult Delete(string id)
40         {
41             return View(_usrs.GetUser(id));
42         }
43 
44         [HttpPost]
45         public RedirectToRouteResult Delete(string id, FormCollection collection)
46         {
47             _usrs.Remove(id);
48             return RedirectToAction("Index");
49         }
50 
51         public JsonResult Details(string id)
52         {
53             UserModel user = _usrs.GetUser(id);
54             var m = new { Status = 1, Message = "Ok", Content = RenderPartialViewToString("Details", user) };
55             return Json(m);
56         }
57       
58 
59     }


Details 方法中 我們返回一個JsonResult,調用了RenderPartialViewToString 方法。

Details 視圖中定義:

   <h2>Details</h2>

    <fieldset>
        <legend>Fields</legend>
        <div class="display-label">UserName</div>
        <div class="display-field">@Model.UserName</div>
        
        <div class="display-label">FirstName</div>
        <div class="display-field">@Model.FirstName</div>
        
        <div class="display-label">LastName</div>
        <div class="display-field">@Model.LastName</div>
        
        <div class="display-label">City</div>
        <div class="display-field">@Model.City</div>
    </fieldset>

    <p>
    @Html.ActionLink("Edit", "Edit", new {  id=@Model.UserName }) |
        @Html.ActionLink("Back to List", "Index")
    </p>

 

客戶端js寫法(必須引入jquery文件):

<script language="javascript" type="text/javascript">
    function showDetails(id) {
        $.post("/Home/Details?id=" + id, function (data) {
            if (data.Status <= 0) {
                alert(data.Message);
                return;
            }
            $("#detailsinfo").html(data.Content);
        });
        }

</script>


運行結果:

直接上代碼:

 點我下載

 

 

    

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM