1

有没有办法可以在 MVC 中向我的 Ajax ActionResult 添加额外数据?

我希望我的控制器创建一个新的 PartialView,然后向其中添加额外的数据,然后可以在 Ajax OnSuccess 函数中获取这些数据。

我尝试从控制器传回一个 Json 结果,其中包含我的自定义数据并在 OnSuccess 函数中使用它,但是因为我只传回我的自定义数据而没有 HTML,Ajax UpdateTarget div 现在变为空白,因为 Ajax用我的不是 HTML 的 Json 结果填充 div。

我想要一种方法让我的控制器发回 PartialView 以便我的 UpdateTarget div 得到更新,它还包含我自己的自定义数据,我可以在 OnSuccess 函数中使用这些数据。

任何帮助,将不胜感激。

谢谢迈克

4

1 回答 1

1

您可以在控制器中使用以下方法:

  public string UpdateDivWithContent()
  {
      var yourModel = ... //make custom data to create your partial    
      return RenderPartialViewToString("YourPartialViewName", yourModel)
  }

我将此方法放入基本控制器中:

  protected string RenderPartialViewToString(string viewName, object model)
    {
        if (string.IsNullOrEmpty(viewName))
        {
            viewName = ControllerContext.RouteData.GetRequiredString("action");
        }

        ViewData.Model = model;

        using (StringWriter sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
            ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
            viewResult.View.Render(viewContext, sw);

            return sw.GetStringBuilder().ToString();
        }
    }

使用手动 ajax 调用从您的视图中调用此操作,例如:

$.ajax({
    url: '@(Url.Action("UpdateDivWithContent","YourControllerName")'
    type: 'POST',
    data: {
        //some params to be passed to the controller
    },
    success: function (result) {
        //result is an html string of your customized partial view
        $("#yourDivId").html(result);
    }
});
于 2012-07-12T11:00:47.673 回答