将从ActionResult中选择的数据转发到另一个的最佳方式

时间:2013-11-13 14:54:40

标签: asp.net-mvc-4

我不相信这个头衔很好,所以随意批评。 :)

我有一个控制器,它返回一个页面,用户可以在该页面上单击某些选项来创建项目列表(使用JS在客户端上动态构建)。当用户满意时,他们可以点击按钮然后......

...目前,隐藏/显示了一些DIV,将(相同)页面转换为选择的只读查看器。

...最佳地,应该调用另一个 ActionResult 来呈现信息。

我的biff是我无法决定将数据从一个页面传输到另一个页面的好方法:查询字符串是一个选项,存储/从DB存储/检索是另一个选项。我对这些中的任何一个都不满意。

使用相同的控制器将数据传输到新视图的平滑和推荐方法是什么?

1 个答案:

答案 0 :(得分:2)

$.ajax({
    url: '@(Url.Action("Action", "Controller"))',
    type: 'post',
    data: {
        id: id,
        data1: data1
    },
    success: function (result) {
        if (result.Success) {
        }
});

一种非常简单的方法就像上面那样,您可以根据需要定义任意数量的字段,只要输入参数匹配,它们就会在控制器上接收

public ActionResult Action(string id, string data1){...

如果你想变得更复杂,你可以使用json数据构建列表和数组,然后将字符串化通常是一个好主意。

var data = {};
data.id = 'id';
data.list = [];
data.list.push({ name: 'name', location: 'location', etc })

然后在ajax调用中

data: Json.stringify(data),

再次,只要名称匹配,控制器就会收到它。希望这有帮助

编辑: Json.stringify是一个用于发送数据的工具。我不知道它的所有细节,但建议用于更复杂的数据。这里的示例我用于将模型发送回控制器,但您提到不想创建模型。我相信在控制器端接收这些数据,你需要输入参数匹配数据中定义的参数。从我上面列出的是一个复杂的类型,所以你的控制器将是这样的。

Public ActionResult Action(string id, List<ComplexType> list){...