这是我的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的帮助
答案 0 :(得分:1)
您的代码中需要进行少量更改:
观察和注释:
在修复之前,我们应该知道关于架构,控制流和标准的几点。
<div id='editSection'>...</div>
之类的编辑部分div。您应该将responseView绑定到editSection div )return View();
我们应该return PartialView();
view.cshtml
中优先选择使用Model
而不是ViewData
绑定元素。如果您在操作中执行return PartialView(model);
,则可以查看模型。ViewData
中ViewBag
或view.cshtml
的使用情况。此外,还不建议在视图中使用业务逻辑。gridmodel
班级名称更改为GridModel
){controller}/{action}
(来自您的网址Script
为controller
而Edit
为action
)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的帮助