Cra*_*aig 17 asp.net-mvc json partial
我有一个MVC应用程序,其中包含很多使用Ajax(jQuery)调用的Controller Actions,并返回部分视图内容,这些内容会更新屏幕的一部分.但我宁愿做的是返回类似这样的JSON.
return Json(new {
Result = true,
Message = "Item has been saved",
Content = View("Partial")
});
Run Code Online (Sandbox Code Playgroud)
HTML只是Json的一个属性.这意味着我需要检索由View方法呈现的HTML.有没有简单的方法可以做到这一点,我看到的一些例子非常令人费解.
编辑:这个问题最初是针对ASP.NET MVC 1的,但如果版本2更容易,我想听听答案.
Jon*_*Jon 11
这是答案!从Martin From的方法稍微改变,似乎工作.如果缺少某些内容,请人们在评论部分中提供任何代码更改.谢谢.
从你的控制器调用它像这样:
string HTMLOutput = Utils.RenderPartialToString("~/Views/Setting/IndexMain.ascx", "", items, this.ControllerContext.RequestContext);
Run Code Online (Sandbox Code Playgroud)
将其添加到课程中
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();
}
Run Code Online (Sandbox Code Playgroud)
NerdDinner有一些很好的例子。这是 NerdDinner 中的 SearchController,它有一个名为 SearchByLocation 的方法,该方法返回 JsonDinner 列表( NerdDinner 的源代码是 Creative Commons):
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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13961 次 |
最近记录: |