JqG​​rid - 将数据(带有重定向)发布到控制器操作结果为404

时间:2013-07-12 11:01:15

标签: post jqgrid action

我有一个带导航额外按钮的JqGrid。在onClickButton事件中,我想将行数据发布到另一个视图,而不仅仅是一个可以通过操作链接完成的值。我需要能够使用它们的值传递更多变量,以使用预填充值[隐藏输入]执行参数化创建操作并在视图中显示。在这种情况下,我只发送2. JSON会更合适。但是让我们继续。

.jqGrid('navButtonAdd', '#rolesPager',   
{
 caption: "",position: 'first',buttonicon: "ui-icon-plus", 
 title: $.jgrid.nav.addtitle,
 onClickButton: function () {
   $.post("/Administration/Roles/CreateWithParams", { 
        foreignColumn: 'WEB_USER_id',    foreignValue: '1' }, function (data) {
           location = "/Administration/Roles/CreateWithParams";
   }).fail(function (error)
   {
     alert(error);
   });
 }});

然后我有一个控制器动作:

    //
    // GET: /Administration/Roles/Create
    [HttpGet]
    [HttpPost]
    public ActionResult CreateWithParams(string foreignColumn, int foreignValue)
    {
        ViewBag.WEB_ROLE_id = new SelectList(db.WEB_ROLE, "WEB_ROLE_id", "name");
        ViewBag.WEB_USER_id = foreignValue;
        return View();
    }

发送数据但在404中呈现其视图失败 - 找不到资源。在我的post方法中,我只有2个参数,但可以作为JSON发送 - 只是一个传递给控制器​​的变量。我认为这与

有关
location = "url";

声明数据可能丢失或更改的内容。我需要以某种方式找到一种方法,如何通过显示传递的post值来渲染动作CreateWithParams(如果GET或POST无关紧要)。对于创建操作,我不需要传递模型数据,只需传递先前的值,但称为视图使用模型。每个post动作示例只返回回调但不显示使用发送数据的控制器动作视图。或者这是一个非常糟糕的方法,这是不可能的?或者通过CreateWithParams操作的结果重新发送数据来调用另一个操作?如果这样可能会让我指向正确的方向吗?

1 个答案:

答案 0 :(得分:0)

看起来ajax有其局限性,不能轻易地重定向参数。因此,页面上隐藏的表单必须出现在场景中。

<form action="/Administration/Roles/CreateWithParams" 
      style="display: none" method="post" 
      name="roles_hiddenForm" id="#roles_hiddenForm" 
      novalidate="novalidate">

<input type="hidden" value="2" name="WEB_USER_id" id="WEB_USER_id">
<input type="hidden" value="WEB_USER_id" name="ForeignKeyColumn" id="ForeignKeyColumn">
<input type="hidden" value="2" name="ForeignKeyValue" id="ForeignKeyValue">
<input type="submit" name="roles_hiddenSubmit" id="roles_hiddenSubmit"></form>

和js我修改为:

.jqGrid('navButtonAdd', '#rolesPager',
{
  caption: "",position: 'first',
  buttonicon: "ui-icon-plus", 
  title: $.jgrid.nav.addtitle,
  onClickButton: function () {
     $("#roles_hiddenSubmit").click();
  }
});