2013-07-27 73 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

我编辑答案。试试看 –