【问题标题】:return url.action as json object mvc返回 url.action 作为 json 对象 mvc
【发布时间】:2015-07-24 21:22:29
【问题描述】:

我的 Controller 方法返回 Json 对象,其 url 形成如下所示:

return Json(new { url = Url.Action("ShowContact", "Customer", new { vm = contactVM }) }, JsonRequestBehavior.AllowGet);

在 ajax 调用的成功代码中,我想将此 url 分配给 window.location.href 以便我可以根据形成的 url 重定向到查看。但是 ajax 调用的返回值显示作为 url 一部分传递的路由值的纯文本值。

因此,我没有得到想要传递给控制器​​的重定向操作方法的任何路由值。

那么我有哪些选项可以传递我的路由值,它是复杂的 c# 对象,包括集合?有没有更好的方法来实现我想做的事情?

谢谢,

【问题讨论】:

  • contactVM 分配了什么?不知道你所说的路由值是什么意思
  • contactVM 是我想传递给我的操作方法的视图模型对象
  • 如果您立即重定向,那么进行 ajax 调用到底有什么意义。只需正常提交即可。
  • 而且由于contactVM 显然是一个复杂的对象,即使您使用了正确的语法,这也可能无法正常工作。您不应将复杂对象传递给 GET 方法。除了丑陋的查询字符串之外,如果模型包含复杂对象或集合的属性,绑定将失败,并且有可能超出查询字符串限制并引发异常
  • @StephenMuecke 我完全同意您对 cme​​ts 的担忧。我知道我试图做的事情并不好,但我需要在服务器端调用后回到客户端,因此我想到了这样的实现。现在我放弃了这种实现的想法并采取了另一种方式。感谢您的意见。

标签: jquery ajax json asp.net-mvc-5


【解决方案1】:

您可以直接传递 url 字符串而不是 'Url.Action()'。 像这样的:

string url = "Customer/ShowContact?vm=" + contactVM;

return Json(url , JsonRequestBehavior.AllowGet);

【讨论】:

  • 它不像你建议的那样工作。它只是将我的对象类型的完全限定名称添加到 url,即 Customer/ShowContact?vm=.ContactVM
【解决方案2】:

试着拼凑起来:

return Json(
    new
    {
        url = Url.Action("ShowContact", "Customer"),
        vm = contactVM
    },
    JsonRequestBehavior.AllowGet);

然后在客户端上:

var url = result.url + '?vm=' + JSON.stringify(result.vm);

当然,我从来没有测试过这个。

【讨论】:

  • 上述解决方案有效,但会导致非常冗长的 n 讨厌的 url...感谢您的帮助。
【解决方案3】:

简单而简短

return Json(new { redirectUrl = @Url.Action("View", "Controller") });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多