c# - 将id从编辑模式获取到jquery函数的最佳方法是什么
问题描述
我正在调用一个 JavaScript 函数,该函数依赖于设置的案例 ID,此案例 ID 是通过编辑函数设置的。显然,我需要某种方法将 case Id 放入 jQuery 函数中,我在想也许我应该为此解析查询字符串,因为您看到的模式是MISObjects/Edit/5
5 将是 case Id 的位置?
我正在使用 asp.net core 3.1 和 Entity Framework Core。我在组件视图中有此代码,以便可以将不同的模型传递给它。
但是当然,我的 jquery 在编辑操作完成之前被调用,我正在使用的变量变为 null
// GET: MISObjects/Edit/5
public async Task<IActionResult> Edit(int id) {
if (id == null) {
return NotFound();
}
SetupViewBags();
var list = _userManager.Users.ToListAsync();
ViewBag.Users = list;
var mISObject = await _context.MISobject.FindAsync(id);
HttpContext.Session.SetString("CaseId", id.ToString());
//Using temp data to store
TempData["CaseId"] = id.ToString();
SetupUploadsViewBags();
if (mISObject == null) {
return NotFound();
}
return View(mISObject);
}
但是当我调试时,值是空白的,因为GetAuditTrailData
在编辑函数触发之前被调用,至少在我放置刹车点时它会这样做。
[HttpGet]
public ActionResult<DataTableWrapper<List<MISAuditTrail>>> GetAuditTrailData() {
Int32.TryParse(TempData.Peek["CaseId"], out int resultCaseId);
var auditTrailsHistory = _context.MisAuditTrail.Where(w => w.isActive == true && w.isDeleted == false && w.MISObjectId== resultCaseId).ToList();
string output = JsonConvert.SerializeObject(auditTrailsHistory);
DataTableWrapper<List<MISAuditTrail>> data = new DataTableWrapper<List<MISAuditTrail>>() {
data = auditTrailsHistory
};
return data;
}
这是驻留在我的组件视图中的 jQuery
@section scripts {
<script>
$(document).ready(function () {
$("#audTrailTable").DataTable({
"ajax": {
url: "/MISObjects/GetAuditTrailData/" ,
type: "get",
database: "json"
},
"columns": [
{ "data": "createdDate" },
{ "data": "createdBy" },
{ "data": "action" }
],
"scrollY": "200px",
"scrollCollapse": true,
"paging": false,
"processing": true, // for show progress bar
"filter": true, // this is for disable filter (search box)
"orderMulti": false // for disable multiple column at once
})
});
alert(caseId);
</script>
}
我的视图组件
namespace MISSystem.Web.ViewComponents {
[ViewComponent(Name = "AudiTrailList")]
public class AuditTrailViewComponent : ViewComponent {
private readonly IHttpContextAccessor _contextAccessor;
private readonly MISDBContext db;
public int CaseId { get; set; }
public AuditTrailViewComponent(MISDBContext context , IHttpContextAccessor contextAccessor) {
db = context;
_contextAccessor = contextAccessor;
}
public async Task<IViewComponentResult> InvokeAsync(
int caseId) {
CaseId = caseId;
var items = await GetItemsAsync(caseId);
_contextAccessor.HttpContext.Session.SetString("CaseId",CaseId.ToString());
return View(items);
}
private Task<List<MISAuditTrail>> GetItemsAsync(int caseId) {
return db.MisAuditTrail.Where(x => x.isActive ==true && x.MISObjectId == caseId).ToListAsync();
}
}
}
组件被这样调用,这在编辑模式触发时很好,它找到了案例的 id,但是当 ajax 调用该函数时,它消失了并且为空。
@await Component.InvokeAsync("AudiTrailList", new { caseId = Model.Id })
解决方案
推荐阅读
- python - Django 中的查询集联合
- image - 编码新手和背景图像有问题
- django - 通过 init 自定义 Django Admin 的 verbose_name,使用默认值
- spring - Whitelabel 错误页面 - 此应用程序没有 /error 的显式映射,因此您将其视为后备
- php - 使用 Woocommerce 中的复选框从 mailchimp 的结帐页面收集电子邮件
- reactjs - 无法使用 dom-testing-library 从作为其父标签的标签访问输入
- node.js - 安装 Vue js 的问题
- javascript - 通过变量访问对象
- javascript - 添加 Google Adsense 后网站图标出现故障
- dialogflow-es - 他们对 api.ai 中触发的后续事件的数量有任何限制吗?