提问人: 提问时间:5/21/2022 更新时间:6/24/2022 访问量:172
如何将JsonResult数据传递给控制器ActionResult并提取它?
How to Pass JsonResult Data to Controller ActionResult and Extract it?
问:
在我的“详细信息”视图中,我有一个“上一个”和一个“下一个”按钮,用于在记录之间导航。以下代码位于我的 Details 方法中:
ViewBag.PreviousId = _db.Applications.OrderByDescending(a => a.AppNumber).Where(a => a.AppNumber < application.AppNumber).Select(a => a.Id).FirstOrDefault();
ViewBag.NextId = _db.Applications.OrderBy(a => a.AppNumber).Where(a => a.AppNumber > application.AppNumber).Select(a => a.Id).FirstOrDefault();
我不需要在所有记录之间导航,而只需要在jQuery数据表结果中显示的记录之间导航。
例如,数据库中可能存在记录 1、2、3、4 和 5。但是,在搜索/过滤我的数据表后,结果可能只是记录 1、3 和 5。因此,如果我打开记录 3 的“详细信息”视图,单击“上一个”按钮应该会带我到记录 1,单击“下一个”按钮应该会带我到记录 5。
在我的 Index 视图中,我有一个 jQuery 数据表。以下是我的 JsonResult 方法的一部分,用于执行搜索、排序和分页:
public JsonResult GetApplications()
{
var draw = Request.Form.GetValues("draw")[0];
var order = Request.Form.GetValues("order[0][column]")[0];
var orderDir = Request.Form.GetValues("order[0][dir]")[0];
var start = Convert.ToInt32(Request.Form.GetValues("start")[0]);
var length = Convert.ToInt32(Request.Form.GetValues("length")[0]);
var data = _db.Applications.AsQueryable();
var totalRecords = data.Count();
--code--
var filteredRecords = data.Count();
data = data.Skip(start).Take(length);
var modifiedData = data.Select(a =>
new
{
a.AppNumber,
--code--
a.Id
});
return Json(new
{
draw = Convert.ToInt32(draw),
recordsTotal = totalRecords,
recordsFiltered = filteredRecords,
data = modifiedData
}, JsonRequestBehavior.AllowGet);
}
如何将 JsonResult 数据传递给我的 Details 方法并提取 AppNumber 和 Id 值?
伪代码:
ViewBag.PreviousId = GetApplications().OrderByDescending(a => a.AppNumber).Where(a => a.AppNumber < application.AppNumber).Select(a => a.Id).FirstOrDefault();
ViewBag.NextId = GetApplications().OrderBy(a => a.AppNumber).Where(a => a.AppNumber > application.AppNumber).Select(a => a.Id).FirstOrDefault();
答:
回答您的问题。我不建议在 C# 方法中使用 Json,它对于发送回前端而不是后端非常有用,因为它不像 C# 那样静态类型化。
您应该创建一个单独的函数,该函数负责使用自定义返回类型从 Applications 表中获取数据。创建一个类,将所有属性添加到该类中,瞧,您现在可以将该类用于应用程序内的所有交互。Application
看起来像这样。
public class Application
{
public int Draw {get; set;}
public int RecordCount {get; set;}
public RecordsFiltered {get; set;}
}
为了使用这个类,你可以简单地在一个方法中这样做:
var application = new Application()
{
Draw = draw,
RecordCount = recordCount,
//etc
}
若要使用该类的此实例中的数据,可以执行以下操作:
application.Draw //to get one specific property from the class
application //to get the whole object
可以将这个新类用作数据库 get 方法中的返回类型:Application
public List<Application> GetApplications()
{
var applications = new List<Application>();
// get all data and fill application object
return applications
}
我的解决方案是在以下方法中保存到会话:data.ToList()
JsonResult
Session["HR_Applications"] = data.ToList();
.
然后从方法中的会话中获取值:Details
var applications = (List<Application>)Session["HR_Applications"];
最后,设置 previousId 和 nextId 值:
ViewBag.PreviousId = applications.OrderByDescending(a => a.AppNumber).Where(a => a.AppNumber < application.AppNumber).Select(a => a.ApplicationId).FirstOrDefault();
ViewBag.NextId = applications.OrderBy(a => a.AppNumber).Where(a => a.AppNumber > application.AppNumber).Select(a => a.ApplicationId).FirstOrDefault();
评论
GetApplications()