Как лучше всего получить идентификатор из режима редактирования в функцию jquery - PullRequest
0 голосов
/ 05 августа 2020

Я вызываю функцию 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 })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...