我有一个视图,它显示了一个数据表中的所有雇员。我可以获取当前行的ID,发送给actionresult函数,然后通过再次抓取来打开视图。
但是我想做的只是使用行中的数据,而不是通过对数据库的查询再次获取数据。我需要的一切都在数据库中。
所有这些都像预期的那样工作,除了…它没有重定向到单个员工详细信息视图。
我需要传递datarow对象,这就是为什么我使用ajax。
我错过了什么?
控制器:
[Route("GetEmployeeByObject")]
public IActionResult GetEmployeeByObject(object? emp)
{
var obj = emp.ToString();
EmployeeDTO dto = JsonConvert.DeserializeObject<EmployeeDTO>(obj);
EmployeeDetailViewModel employeeDetailViewModel = new(dto);
return View(employeeDetailViewModel);
}
点击数据库中的编辑按钮时的Javascript:
//individual record event
$('#employee_table tbody').on('click', '.editLink', function () {
var emp = employee_table.row($(this).parents('tr')).data();
$.ajax({
url: "Employees/GetEmployeeByObject/",
type: 'POST',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(emp),
traditional: true,
success: function(data){
//I don't want the code here because I want it to just load the employee view.
}
});
});
一切正常。但是我需要它不返回到页面,而是重定向到单个员工详细信息页面。
在你的情况下,我不建议你使用ajax,因为你不能使用ajax直接重定向到新的个人页面,我建议你使用form submit
,每一行作为表单,当用户单击按钮时,它将提交行数据到动作,只是直接返回视图。但如果您仍然想使用ajax,这里有两个方法。第一个是在GetEmployeeByObject
操作中,您需要返回您想要重定向的新单个页面的url
,而不是直接返回return view(xxx)
:
return "xxx/xxx?property1='xxx'&property2='xxxx'";
然后在ajax成功方法:
success:function(response) {
if(response){ // check whether response is received
window.location.href = response;}
}
第二个方法仍然是return view(xxx)
后端,然后在ajax成功方法:
success: function(response){
document.write(response)
}