2013-07-27 95 views
1

我想從控制器發送ViewModel以JSON格式查看。從控制器傳遞數據通過JSONResult查看

控制器:

public ActionResult Select(int pageLimiter) 
{ 
    var viewModel = new ArticlesViewModel 
          { 
           Articles = this.Service.GetArticles(0, 0, 0), 
           ArticlesTotal = this.Service.CountArticles(0), 
           Pages = new List<string> 
              { 
               "1", "2", "3" 
              } 
          }; 
    return Json(viewModel, JsonRequestBehavior.AllowGet); 
} 

查看:

<ul class="articleList"> 
@if (@Model != null) 
{ 
    foreach (var article in @Model.Articles) 
    { 
     <li> 
      <header><a href="/Article/@article.ArticleId">@article.Title</a></header> 
      <nav> 
       <span>@article.AuthorName</span> | 
       <time>@article.PublishDate.ToString("")</time> | 
       <span><a href="/Articles/@article.CategoryId">@article.CategoryName</a></span> | 
       <span>@article.Comments Comments</span> 
      </nav> 
      <section> 
       @article.Content 
      </section> 
     </li> 
    } 
} 
</ul> 

<script type="text/javascript"> 
$(document).ready(function() { 
    GetArticles(5); 

    $("#selectPager").change(function() { 
     var selectedItem = ""; 
     $("#selectPager option:selected").each(function() { 
      selectedItem = $(this).text(); 
     }); 

     GetArticles(selectedItem); 
    }); 
}); 

function GetArticles(pageLimitValue) { 
    $.ajax(
    { 
     url: "/Articles/Select", 
     dataType: "json", 
     data: { pageLimiter: pageLimitValue }, 
     async: true, 
     beforeSend: function() { 
      alert("before"); 
     }, 
     complete: function (data) { 
      @Model = SOME_MAGIC_TRICKS 
     } 
    }); 
} 

正如你可以看到,在整個事件的話SOME_MAGIC_TRICKS。在這個地方,我想設置從控制器獲得的@Model。它有可能嗎?如何從ajax結果中插入數據以查看模型(默認爲空)?

回答

1

你正試圖從客戶端的代碼修改服務器變量。這是不可能的。

如果你想重新呈現您的網頁上complete內容,您可以渲染<ul class="articleList">PartialView並返回,而不是JsonResult相同的局部視圖。此外,oncomplete處理程序將用返回的內容更新您的<ul class="articleList">

+0

好吧,我明白了。謝謝。 – Fka

0

您可以發送數據做序列化也可能是這樣的:

public ActionResult Select(int pageLimiter) 
{ 
    var viewModel = new ArticlesViewModel 
          { 
           Articles = this.Service.GetArticles(0, 0, 0), 
           ArticlesTotal = this.Service.CountArticles(0), 
           Pages = new List<string> 
              { 
               "1", "2", "3" 
              } 
          }; 

    string myjsonmodel = new JavaScriptSerializer().Serialize(viewModel); 
    return Json(jsonmodel = viewModel, JsonRequestBehavior.AllowGet); 
} 

使用使用System.Web.Script.Serialization不要忘記;

編輯:

反序列化對象試試這個:

@{ 
JavaScriptSerializer jss= new JavaScriptSerializer(); 
User user = jss.Deserialize<User>(jsonResponse); 
} 
+0

但是,如何設置接收到的數據在View.cshtml文件中執行@Model。這是關鍵。 – Fka

+0

我編輯答案。試試看 –

相關問題