如何获取视图html并返回客户端

时间:2013-08-20 12:44:50

标签: asp.net-mvc

下面是返回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。感谢

3 个答案:

答案 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。

希望这有帮助。