По какой-то причине мой словарь сбрасывается на 0
(без элементов), каждый раз, когда я пытаюсь получить к нему доступ с помощью моего ActionResult Details()
метода.Я не совсем уверен, почему это происходит и что я могу сделать, чтобы предотвратить это.Я пытался изменить модификаторы доступа, но это не привело к успеху, я также искал несколько форумов, но трудно найти аналогичную проблему.Я уверен, что это просто, что я просто наблюдаю, если кто-нибудь сможет помочь, я был бы очень признателен.Я отладил его, чтобы увидеть, действительно ли данные добавляются в словарь.Похоже, что это добавляется просто отлично.
using TransactionImporter.Factory;
using TransactionImporter.WebUI.Models;
using TransactionImpoter.Domain;
namespace TransactionImporter.WebUI.Controllers
{
public class DownloadController : Controller
{
private IUploadDetailLogic uploadDetailLogic = UploadDetailFactory.CreateLogic();
private IExporterLogic exporterLogic = ExporterFactory.CreateLogic();
private IUserLogic userLogic = UserFactory.CreateLogic();
public IDictionary<int, DownloadModels> IdModelDictionary = new Dictionary<int, DownloadModels>();
// GET: Download
public ActionResult Index()
{
List<UploadDetail> uploadDetailList = uploadDetailLogic.UploadDetailList();
List<DownloadModels> downloadableList = new List<DownloadModels>();
foreach (UploadDetail upload in uploadDetailList)
{
User user = userLogic.GetUserById(upload.UserId);
DownloadModels model = new DownloadModels(upload.UploadId, upload.UserId, user.Username,
upload.StartTimeUpload.ToString(), upload.FileName, Convert.ToInt32(upload.FileSize));
downloadableList.Add(model);
IdModelDictionary.Add(upload.UploadId, model);
}
return View(downloadableList);
}
// GET: Download/Details/5
public ActionResult Details(int id)
{
return View(IdModelDictionary[id]);
}
DownloadModels:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace TransactionImporter.WebUI.Models
{
public class DownloadModels
{
public DownloadModels(int uploadId, int userId, string uploadedOn, string fileName, int fileSize)
{
UploadId = uploadId;
UserId = userId;
UploadedOn = uploadedOn;
FileName = fileName;
FileSize = fileSize;
}
public DownloadModels(int uploadId, int userId, string username, string uploadedOn, string fileName, int fileSize)
{
UploadId = uploadId;
UserId = userId;
Username = username;
UploadedOn = uploadedOn;
FileName = fileName;
FileSize = fileSize;
}
public DownloadModels() { }
public int UploadId { get; private set; }
public string UploadedOn { get; private set; }
public string FileName { get; private set; }
public int FileSize { get; private set; }
public int UserId { get; private set; }
public string Username { get; private set; }
public IEnumerator GetEnumerator()
{
throw new NotImplementedException();
}
}
}
Вот индекс, который вызывает метод ActionResult Details()
в контроллере каждый раз, когда пользователь наводит курсор мыши на деталиHREF.Поскольку словарь решает сбросить себя до 0
, каждый раз, когда я наводю курсор на детали, я получаю NPE, потому что он не может найти ключ, который я ищу, потому что в словаре нет данных.
@model IEnumerable<TransactionImporter.WebUI.Models.DownloadModels>
@{
ViewBag.Title = "Index";
}
<h2>Uploads</h2>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Username)
</th>
<th>
@Html.DisplayNameFor(model => model.FileName)
</th>
<th>
@Html.DisplayNameFor(model => model.UploadId)
</th>
<th>
@Html.DisplayNameFor(model => model.UploadedOn)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Username)
</td>
<td>
@Html.DisplayFor(modelItem => item.FileName)
</td>
<td>
@Html.DisplayFor(modelItem => item.UploadId)
</td>
<td>
@Html.DisplayFor(modelItem => item.UploadedOn)
</td>
<td>
<a href="#" onmouseover="ShowDetails(@item.UploadId)">Details</a> |
@Html.ActionLink("Download-EU", "DownloadEu", new { id = item.UploadId, controller = "Download" }) |
@Html.ActionLink("Delete", "Delete", new { id = item.UploadId, controller = "Download" })
</td>
</tr>
}
</table>
<div class="col-md-6" id="MyDetails">
</div>
@section Scripts
{
<script>
var ShowDetails = function (id) {
var detailsDiv = $('#MyDetails');
$.get('/Download/Details/', { id: id }, function (data) {
detailsDiv.html(data);
});
};
</script>
}