如何从另一个视图上编写的 JS 代码重定向到控制器,并将 JSON 对象随之传递

How to redirect to a controller from JS code written on another view and pass JSON object along with it

本文关键字:并将 控制器 JSON 对象 重定向 代码 视图 另一个 JS      更新时间:2023-09-26

我正在使用 ASP.NET MVC 3,我是新手。我在一个视图上有一个 EXTJS 网格,在做出选择后,用户被重定向到另一个填充所选值的网格。此网格放置在另一页上。在父网格上,我使用了这个:

$(function () {
    $("#btnRedirect").click(function () {
        GetSelectedRecord(); //Gets the selected record on the jsonlst variable

        var link = '@Url.Action("GetData","ChildGrid",new {jsonData="-1"})';
        link = link.replace("-1", jsonlst);
        window.location.href = link;
    });
});

其中 jsonlst 是 JSON 对象,它包含网格中的选定记录。

GetData 操作只需:-

public ActionResult Get(string jsonData)
    {
        lst = new JavaScriptSerializer().Deserialize<IList<ParentGrid>>(jsonData);
        return RedirectToAction("Index", new { strJson = jsonData });
    }

但问题是我的 URL 包含整个 json 字符串作为查询字符串,看起来不太好。还有其他方法可以实现这一点吗?

如果您不想在 URL 中显示 json,则在将数据发送到"getdata"操作时,您应该使用 POST 而不是 GET。我能想到的最简单的方法是创建一个带有隐藏字段的表单,然后提交它。所以你在某处创建一个表单

<form id="something" href='@Url.Action("GetData","ChildGrid")' method="POST">
     <input type="hidden" name="jsonData" id="jsonData" />
</form>

然后在 btnredirect 中执行此操作:

$("#jsonData").value(jsonLst);
$("#something").submit();

您必须确保在控制器中,可以使用 POST 方法访问该操作。

另外,为什么要混合jquery和EXTjs?如果你正在使用 EXTJ 开发大多数 UI,那么最好使用 ExtJS 而不是 jquery 来处理事件和 DOM 操作。

相关文章: