需要在链接点击时将Rowdata传递给另一个视图

时间:2014-10-13 16:38:04

标签: c# jquery asp.net-mvc jqgrid

这是我的JQGrid代码:

click: function (e) {
                            debugger;
                            var id = $(e.target).closest("tr.jqgrow").attr("id");
                            rowdata = jQuery("#EmpTable").getRowData(id);
                            Data = { Id: rowdata.Id, Name: rowdata.Name, Designation: rowdata.Designation };

                            var url = 'http://localhost:50428/Script/Edit/';
                           return $.post(url, Data);

                                  } 

这是我收集数据的控制器代码

 [HttpPost]
      public ActionResult Edit(FormCollection form)
      {
          gridmodel properties = new gridmodel();

          properties.Id = Convert.ToInt32(form["id"]);
          properties.Name = form["Name"];
          properties.Designation = form["Designation"];
          ViewBag.id = properties.Id;
          ViewBag.name = properties.Name;
          ViewBag.designation = properties.Designation;
          return View();
      }

现在这是我的查看代码

从控制器传递到视图的数据

 @model MVC5_JQGrid.Models.gridmodel

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Edit</title>
</head>
<body>
  <div>
      Id:@ViewBag.id
      <br />
      Name:@ViewBag.name
      <br />
      Designation:@ViewBag.designation

    </div>
</body>
</html>

但我无法加载此页面,但在网络中---&gt;响应主体我可以看到这些值已分配

更新

你好Venkata感谢你的回答我将保留你提到的点数和+1来自我的观察点,来解决问题。它是从oleg建议解决的:(这是Oleg给出的答案)你问题的原因是使用$ .post(url,Data);它只发送关于$ .ajax的数据({url:“/ Script / Edit”,数据:数据,类型:“POST”});.你需要做$ .submit。如果您要使用HTTP GET,那么您只需将包含参数的新URL分配给location.href(类似于location.href =“/ Script / Edit?”+ $ .param(Data))。在HTTP POST的情况下,需要构建包含(或者只是在页面隐藏的表单上包含具有所需名称属性的所有必需元素)的元素并使用$ .submit。 感谢oleg和Venkata的帮助

2 个答案:

答案 0 :(得分:1)

您的代码中需要进行少量更改:

  

观察和注释:
  在修复之前,我们应该知道关于架构,控制流和标准的几点。

  • jQuery AJAX请求获得对其成功回调处理程序的响应(在您的代码中,您错过了成功通话)
  • 成功函数我们应该在现有页面中构建或追加或设置HTML以定位占位符标记(假设您在jqGrid页面中有<div id='editSection'>...</div>之类的编辑部分div。您应该将responseView绑定到editSection div )
  • 当我们发送AJAX请求时:在Controller.Action而不是return View();我们应该return PartialView();
  • view.cshtml中优先选择使用Model而不是ViewData绑定元素。如果您在操作中执行return PartialView(model);,则可以查看模型。
  • 尝试减少ViewDataViewBagview.cshtml的使用情况。此外,还不建议在视图中使用业务逻辑。
  • 尝试Follow best practices: Capitalization Conventions(在您的代码中将gridmodel班级名称更改为GridModel
  • 默认情况下,路由网址模板将{controller}/{action}(来自您的网址ScriptcontrollerEditaction
  • 确保您传递了名称为Edit的Controller中正确的控制器和操作名称{ScriptController操作吗?)
  

JavaScript JQGrid代码中的更改:

url = '/Script/Edit/';
return $.post(url, Data).success(function(response){
           //response datatype can be JSON or XML or HTML or text (In your case HTML Edit.cshtml View)
           //update you target html tag with response view.
           $('#editSection').html(responseView);
       });
  

控制器的变化:

  [HttpPost]
  public ActionResult Edit(FormCollection form)
  {
      var properties = new gridmodel();

      properties.Id = Convert.ToInt32(form["id"]);
      properties.Name = form["Name"];
      properties.Designation = form["Designation"];

      ViewBag.id = properties.Id;
      ViewBag.name = properties.Name;
      ViewBag.designation = properties.Designation;

      return PartialView();
  }

如果操作只需要输入参数id,name&amp;指定

    [HttpPost]
    public ActionResult Edit(int id, string name, string designation)
    {
        var gridModel = new GridModel();

        gridModel.Id = id;
        gridModel.Name = name;
        gridModel.Designation = designation;

        ViewBag.id = gridModel.Id;
        ViewBag.name = gridModel.Name;
        ViewBag.designation = gridModel.Designation;

        return PartialView(gridModel);
    }

答案 1 :(得分:0)

你好Venkata感谢你的回答我将保留你提到的点数和+1来自我的观察点,来解决问题。它是从oleg建议解决的:(这是Oleg给出的答案)你问题的原因是使用$ .post(url,Data);它只发送关于$ .ajax的数据({url:“/ Script / Edit”,数据:数据,类型:“POST”});.你需要做$ .submit。如果您要使用HTTP GET,那么您只需将包含参数的新URL分配给location.href(类似于location.href =“/ Script / Edit?”+ $ .param(Data))。在HTTP POST的情况下,需要构建包含(或者只是在页面隐藏的表单上包含具有所需名称属性的所有必需元素)的元素并使用$ .submit。感谢oleg和Venkata的帮助