MVC:如何向Ajax ActionResult添加额外数据

时间:2012-04-18 12:49:57

标签: ajax asp.net-mvc asp.net-mvc-partialview

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

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

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

我希望我的控制器能够发送回PartialView,以便更新我的UpdateTarget div,它还包含我自己的自定义数据,我可以在OnSuccess函数中使用。

任何帮助都将不胜感激。

由于 麦克

1 个答案:

答案 0 :(得分: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);
    }
});