C# 需要在单击链接时将行数据传递到另一个视图

C# 需要在单击链接时将行数据传递到另一个视图,c#,jquery,asp.net-mvc,jqgrid,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);

以下是我的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>
@model MVC5\u JQGrid.Models.gridmodel
@{
布局=空;
}
编辑
Id:@ViewBag.Id

名称:@ViewBag.Name
名称:@ViewBag.Designation
但我无法加载此页面,但在网络-->响应体中,我可以看到这些值已分配

更新


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

您的代码需要做一些更改:

观察和注释:
在修复之前,我们应该了解一些关于架构、控制流和标准的要点

  • jQuery AJAX请求获得对其成功回调处理程序的响应(在代码中,您错过了成功调用)
  • 在success函数中,我们应该在现有页面中构建、附加或设置HTML到目标占位符标记(假设您在jqGrid页面中有div用于编辑部分,如
    。您应该将responseView绑定到editSection div)
  • 当我们发送AJAX请求时:在Controller.Action中,而不是
    returnview()我们应该有
    返回PartialView()
  • view.cshtml
    中,优先使用
    Model
    绑定元素,而不是
    ViewData
    。如果您
    返回PartialView(model),则可以查看模型在操作中
  • 尽量减少
    view.cshtml
    ViewData
    ViewBag
    的使用。此外,不建议在视图中使用业务逻辑
  • 尝试(在代码中将
    gridmodel
    类名更改为
    gridmodel
  • 默认情况下,路由url模板将具有
    {controller}/{action}
    (从url
    Script
    controller
    Edit
    action
  • 确保传递的控制器和操作名称正确(是否
    Edit
    Action位于名为
    ScriptController
    ?)的控制器中)
JavaScript JQGrid代码的更改:

控制器的更改:

如果操作只需要输入参数id、名称和名称,您可以像下面一样更改上述编辑操作

    [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,让我来观察这个问题。这是通过oleg建议解决的:(以下是oleg给出的答案)问题的原因是使用$.post(url,数据);它只发送有关$.ajax({url://Script/Edit',data:data,键入:“POST”})的数据;。您需要改为执行$.submit。如果要使用HTTP GET,则可以将包含参数的新URL分配给location.href(类似于location.href=“/Script/Edit?”+$.param(Data))。在HTTP POST的情况下,需要使用包含的元素(或者只在页面上具有所有必需元素和必需名称属性的隐藏表单)进行构建,并使用$.submit。感谢oleg和Venkata的帮助

尝试删除强制转换IEnumerable,看看ViewData是否打印出div中的值?也就是说,我会使用ViewModel类,它里面有GridModel,而不是使用ViewDatatranceporter。感谢您回复帖子,我已经按照您的方式进行了更改,但运气不佳,仍然无法查看另一个视图,我仍在网格页面中。请将解决方案作为新答案发布。当然,请找到解决方案
  [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();
  }
    [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);
    }