我正在使用 ASP.NET MVC 3,而且我是它的新手。我在一个 View 上有一个 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();
您必须确保在 Controller 中,可以使用 POST 方法访问该操作。
另外为什么要混合 jquery 和 EXTjs ?如果您使用 EXTJ 开发大部分 UI,那么最好使用 ExtJS 而不是 jquery 来进行事件和 DOM 操作。
关于javascript - 如何从另一个 View 上编写的 JS 代码重定向到 Controller 并与其一起传递 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11045997/