如何使用JsonResult重新加载局部视图?

时间:2014-04-01 19:31:16

标签: jquery ajax asp.net-mvc json

在我的View我有一个带有微调器的功能区,用户可以选择int类型作为参数来获取存储库中的一些数据。

所以我提出了一个ajax请求:

  var url = "/ControllerExample/GetJsonUrl?param=" +      s.GetItemValueByName("countParam") ;
        jQuery.ajax({
            type: "GET",
            url: url,
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                window.location.href = data;
            },
            failure: function (errMsg) {
                alert(errMsg);
            }
        });

在我的控制器中,我有ActionResult返回JsonResult,其中包含“成功”功能的特定网址:

 public ActionResult GetJsonUrl(string param)
    {

            var urlHelper = new UrlHelper(ControllerContext.HttpContext.Request.RequestContext);

            string url = urlHelper.Action("OtherAction", "ControllerExample", new {id = param});

            return new JsonResult {Data = url, JsonRequestBehavior = JsonRequestBehavior.AllowGet};           
    }

因此,如果结果是成功,请求将返回到ajax成功函数,然后转到 ExampleController 以执行 OtherAction

我想只用一个动作来做,有可能吗?刷新JsonResult中的页面。

1 个答案:

答案 0 :(得分:2)

您可以使用模型将该视图渲染为字符串并使用JSON结果传递。然后只需替换整个DOM elemet。

Render a view as a string

public string RenderRazorViewToString(string viewName, object model)
{
  ViewData.Model = model;
  using (var sw = new StringWriter())
  {
    var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
    var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
    viewResult.View.Render(viewContext, sw);
    viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
    return sw.GetStringBuilder().ToString();
  }
}

在这里

   success: function (data) {
        $("#targetDOMElementId").val(data);
    },

targetDOMElementId 可以是DIV的容器View