下面是返回jquery函数视图的代码片段,但我想知道如何提取或获取视图html并返回到客户端。
$(function() {
$('#myddl').change(function() {
var url = $(this).data('url');
var value = $(this).val();
$('#result').load(url, { value: value })
});
});
<div id="result"></div>
并且在Foo操作中你可以返回一个局部视图:
public ActionResult Foo(string value)
{
SomeModel model = ...
return PartialView(model);
}
在网络表单中这样我可以取消用户控件或任何与控件相关的控件。
System.Web.UI.Page pageHolder = new System.Web.UI.Page();
BBAReman.facebox.FeedBack ctl = (BBAReman.facebox.FeedBack)pageHolder.LoadControl("~/UserControls/FeedBack.ascx");
System.Web.UI.HtmlControls.HtmlForm tempForm = new System.Web.UI.HtmlControls.HtmlForm();
tempForm.Controls.Add(ctl);
pageHolder.Controls.Add(tempForm);
StringWriter output = new StringWriter();
HttpContext.Current.Server.Execute(pageHolder, output, false);
outputToReturn = output.ToString();
所以如何在mvc中做同样的事情。我想知道如何从动作方法中获取视图html。感谢
答案 0 :(得分:9)
您可以使用此方法,从控制器传递ActionResult并从视图中获取html
private string RenderActionResultToString(ActionResult result)
{
// Create memory writer.
var sb = new StringBuilder();
var memWriter = new StringWriter(sb);
// Create fake http context to render the view.
var fakeResponse = new HttpResponse(memWriter);
var fakeContext = new HttpContext(System.Web.HttpContext.Current.Request,
fakeResponse);
var fakeControllerContext = new ControllerContext(
new HttpContextWrapper(fakeContext),
this.ControllerContext.RouteData,
this.ControllerContext.Controller);
var oldContext = System.Web.HttpContext.Current;
System.Web.HttpContext.Current = fakeContext;
// Render the view.
result.ExecuteResult(fakeControllerContext);
// Restore old context.
System.Web.HttpContext.Current = oldContext;
// Flush memory and return output.
memWriter.Flush();
return sb.ToString();
}
答案 1 :(得分:1)
您可以对MVC操作方法进行AJAX调用,该方法将部分视图作为HTML返回。然后,您只需调用.html
jquery函数来填充div。像这样:
$(function() {
$('#myddl').change(function() {
var url = $(this).data('url');
var value = $(this).val();
$.ajax({
type: "POST",
url: "@Url.Action("Foo", "Controller")", // replace with your actual controller and action
data: JSON.stringify({ value: value }),
success: function(result) {
$('#result').html(result);
}
});
});
答案 2 :(得分:0)
据我所知,您需要一种方法将视图的原始HTML返回给客户端。如果这就是你想要的,你必须使用MVC用来呈现HTML的ViewEngine。
以下是样本:
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = null;
viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
上面的代码找到了一个局部视图,并通过MVC视图引擎将其转换为HTML String。
希望这有帮助。