【问题标题】:How to reload a partial view with JsonResult?如何使用 JsonResult 重新加载部分视图?
【发布时间】:2014-05-12 18:39:18
【问题描述】:

在我的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);
            }
        });

在我的 Controller 中,我有一个 ActionResult,它返回一个带有特定 URL 的 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};           
    }

所以如果结果是success,请求返回ajax成功函数,然后到ExampleController执行OtherAction .

我想只用一个动作就可以做到,可以吗?刷新页面在JsonResult什么的。

【问题讨论】:

  • 您可以使用模型将该视图呈现为字符串并使用 JSON 结果传递。

标签: jquery ajax asp.net-mvc json


【解决方案1】:

您可以使用您的模型将该视图呈现为字符串并使用 JSON 结果传递。然后只需替换整个 DOM 元素。

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

【讨论】:

  • 谢谢,现在我明白了。我认为它会起作用。顺便说一句,我正在测试 ajax 请求,并且由于错误我将类型设置为“POST”,它也可以正常工作。你知道为什么吗?
  • @ggui 很高兴它对您有用!
  • @ggui 在某些情况下,在纯 HTTP 中获取由 json 组成的复杂类型的数据时,不允许使用正文 (json) 中的请求数据进行 GET 请求,但允许这样做GET 请求在 URI 中包含请求数据,例如 domain.com?number=2&factor=4 但它不是 json 数据,因此您也可以使用 POST 来获取具有复杂请求类型的 json 数据 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 2015-01-01
相关资源
最近更新 更多