C# 需要在单击链接时将行数据传递到另一个视图
以下是我的JQGrid代码: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);
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模板将具有
(从url{controller}/{action}
是Script
和controller
是Edit
)action
- 确保传递的控制器和操作名称正确(是否
Action位于名为Edit
?)的控制器中)ScriptController
[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);
}