【问题标题】:pass json object to controller action with get request使用 get 请求将 json 对象传递给控制器​​操作
【发布时间】:2013-03-29 22:09:08
【问题描述】:

我正在使用 asp.net mvc4。我有一个操作方法,它是一个 get 方法,因为它返回一个从 JavaScript/Jquery 调用的 mvc 视图。

javascript 向控制器操作发出 get 请求。我有一个想要传递给 mvc 操作的 json 对象。但是作为一个获取请求,因为我需要从中返回一个视图,所以它很难构成。

是否可以传递一个映射到控制器动作签名上的对象的 json 对象?我正在寻找可能有帮助的库,例如 http://benalman.com/projects/jquery-bbq-plugin/

有什么建议或想法吗?

【问题讨论】:

  • 不能将值作为 URL 参数传递吗?但是,您必须确保使用 JS 函数 encodeURIComponent 对 JSON 字符串进行编码。此外,URI 的最大长度可能会阻止您使用这种方法。请注意,GET 方法不应用于可能具有副作用的操作,例如创建或修改资源。
  • 为什么需要get? (关于这个尖叫帖子的一切)
  • 因此,如果我想根据传入的值从操作中检索 mvc 视图并在标记中呈现视图的内容。 POST 是最好的方法吗?与 GET 相比,性能如何?

标签: javascript jquery asp.net-mvc asp.net-mvc-4 get


【解决方案1】:

您不需要任何外部 API 来执行此操作。您需要做的就是创建一个与 JSON 对象具有相同属性和名称的 c# 对象。 例如创建一个对象为

public class MyObject{
    public string MyProperty1{get; set;}
    public string Property2{get; set;}
}

在 jquery 中创建对象是正确的,我假设并使用 jquery 语法,如
如下

$.get('@Url.Action("MyAction","MyController")',
    {myObject: jqueryObject},
    function(resp){$("#myDiv").innerHTML(resp);});

如果是 Action,请使用函数声明,如

public ActionResult MyAction(MyObject myObject)
{
    // your code here
    return PartialView("_MyPartialView", myModelForPartialView);
}

顺便说一句,这种方式适用于 Get 和 Post。

【讨论】:

  • 您可能希望将 [fromBody] 作为属性添加到方法参数。公共 ActionResult MyAction([FromBody]MyObject myObject)
【解决方案2】:

您可以使用类似 servicestack http://www.servicestack.net/ 的东西,它可以处理所有事情,并且做得很好,作为替代方案,还有 MVC API 选项,但 servicestack 在这方面做得更好。

我相信,如果您查看这个项目,您会从中获得好主意,或者学会将数据驱动的代码与 UI 项目分离。

【讨论】:

    猜你喜欢
    • 2018-10-07
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2012-10-02
    • 1970-01-01
    • 2016-01-04
    相关资源
    最近更新 更多