Я вызываю функцию JavaScript, которая полагается на установленный идентификатор случая, этот идентификатор случая устанавливается через функцию редактирования. Очевидно, мне нужен какой-то способ передать идентификатор случая в функцию jQuery. Я думаю, может быть, мне следует проанализировать строку запроса для этого, поскольку вы видите шаблон для этого MISObjects/Edit/5
, где 5 будет идентификатором случая?
Я использую asp. net core 3.1 и Entity Framework Core. У меня есть этот код в представлении компонента, чтобы я мог передать ему другую модель.
Но, конечно, мой jquery вызывается до того, как действие редактирования завершено, их для переменных, которые я использую, становится нулевым
// 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);
}
Но когда я отлаживаю Value, пусто, потому что 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();
}
}
}
Компонент вызывается как это нормально, когда срабатывает режим редактирования, он находит идентификатор случая, но когда ajax вызывает эту функцию, он пропадает и равен нулю.
@await Component.InvokeAsync("AudiTrailList", new { caseId = Model.Id })