首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP MVC以JSON格式查看内容

ASP MVC以JSON格式查看内容
EN

Stack Overflow用户
提问于 2009-05-26 00:15:34
回答 8查看 14.3K关注 0票数 17

我有一个MVC应用程序,有相当多的控制器操作,使用Ajax (jQuery)调用,并返回部分视图内容,更新屏幕的一部分。但我更愿意做的是返回类似这样的JSON。

代码语言:javascript
复制
return Json(new { 
    Result = true, 
    Message = "Item has been saved", 
    Content = View("Partial") 
});

其中HTML只是Json的一个属性。这意味着我需要检索View方法呈现的HTML。有没有什么简单的方法可以做到这一点,我见过的一些例子是相当复杂的。

编辑:这个问题最初是针对ASP.NET MVC1的,但如果版本2让它变得更容易,我希望听到答案。

EN

回答 8

Stack Overflow用户

发布于 2009-05-26 15:19:40

这就是答案!与Martin From's方法相比,这是一个细微的变化,而且似乎是有效的。如果有遗漏的东西,请人们在评论部分贡献任何代码更改。谢谢。

在你的控制器中,像这样调用它:

代码语言:javascript
复制
string HTMLOutput = Utils.RenderPartialToString("~/Views/Setting/IndexMain.ascx", "", items, this.ControllerContext.RequestContext);

将此代码添加到类中

代码语言:javascript
复制
public static string RenderPartialToString(string controlName, object viewData, object model, System.Web.Routing.RequestContext viewContext)
{
     ViewDataDictionary vd = new ViewDataDictionary(viewData);
     ViewPage vp = new ViewPage { ViewData = vd };

     vp.ViewData = vd;
     vp.ViewData.Model = model;
     vp.ViewContext = new ViewContext();
     vp.Url = new UrlHelper(viewContext);

     Control control = vp.LoadControl(controlName);

     vp.Controls.Add(control);

     StringBuilder sb = new StringBuilder();

     using (StringWriter sw = new StringWriter(sb))
     using (HtmlTextWriter tw = new HtmlTextWriter(sw))
     {
         vp.RenderControl(tw);
     }

     return sb.ToString();
}
票数 11
EN

Stack Overflow用户

发布于 2009-05-26 01:06:22

NerdDinner在这方面有一些很好的例子。下面是NerdDinner中的SearchController,它有一个名为SearchByLocation的方法,该方法返回一个JsonDinners列表( NerdDinner的source code是知识共享):

代码语言:javascript
复制
namespace NerdDinner.Controllers {

    public class JsonDinner {
        public int      DinnerID    { get; set; }
        public string   Title       { get; set; }
        public double   Latitude    { get; set; }
        public double   Longitude   { get; set; }
        public string   Description { get; set; }
        public int      RSVPCount   { get; set; }
    }

    public class SearchController : Controller {

        IDinnerRepository dinnerRepository;

        //
        // Dependency Injection enabled constructors

        public SearchController()
            : this(new DinnerRepository()) {
        }

        public SearchController(IDinnerRepository repository) {
            dinnerRepository = repository;
        }

        //
        // AJAX: /Search/FindByLocation?longitude=45&latitude=-90

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult SearchByLocation(float latitude, float longitude) {

            var dinners = dinnerRepository.FindByLocation(latitude, longitude);

            var jsonDinners = from dinner in dinners
                              select new JsonDinner {
                                  DinnerID = dinner.DinnerID,
                                  Latitude = dinner.Latitude,
                                  Longitude = dinner.Longitude,
                                  Title = dinner.Title,
                                  Description = dinner.Description,
                                  RSVPCount = dinner.RSVPs.Count
                              };

            return Json(jsonDinners.ToList());
        }
    }
}
票数 4
EN

Stack Overflow用户

发布于 2010-05-29 18:06:46

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/908450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档