Abd*_*bdo 6 c# asp.net asp.net-mvc asp.net-mvc-2
我想获取一个视图将在字符串中生成的html代码,在我的控制器中修改它,然后将其添加到我的JsonResult.
我发现代码可以完成我所说的部分内容.我想从aspx View中做到这一点.
- 额外说明:
假设我有一个页面Frame.aspx/Controller/Frame将返回
我希望在它出来之前得到响应,所以我可以用jsonp包装它.我不希望每次都在代码中编辑返回结果,这就是我想以编程方式加载视图的原因.
/ Controller/Frame当前返回Frame.aspx的内容: <html><body>hello</body></html>
假设有一个函数可以在字符串生成器中呈现视图
StringBuilder sb = new StringBuilder();
RenderView(sb, "Frame");
Run Code Online (Sandbox Code Playgroud)
现在拿sb并用jsonp包装它:
public JsonResult Frame(string callback)
{
StringBuilder sb = new StringBuilder();
RenderView(sb, "Frame");
return new JsonResult
{
Data = "(function() { " + callback + "(" + clientResponse + "); })();"
,
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*eer 19
这就像一个魅力(通过SO得到它).
我这样使用它:
public class OfferController : Controller
{
[HttpPost]
public JsonResult EditForm(int Id)
{
var model = Mapper.Map<Offer, OfferEditModel>(_repo.GetOffer(Id));
return Json(new { status = "ok", partial = this.RenderPartialViewToString("Edit", model) });
}
}
public static partial class ControllerExtensions
{
public static string RenderPartialViewToString(this ControllerBase controller, string partialPath, object model)
{
if (string.IsNullOrEmpty(partialPath))
partialPath = controller.ControllerContext.RouteData.GetRequiredString("action");
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, partialPath);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
// copy model state items to the html helper
foreach (var item in viewContext.Controller.ViewData.ModelState)
if (!viewContext.ViewData.ModelState.Keys.Contains(item.Key))
{
viewContext.ViewData.ModelState.Add(item);
}
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11686 次 |
| 最近记录: |