请我协助解决我的代码试图处理上述问题的任何问题。 我之前编写了代码并且它一直在工作,但今天我尝试了它,它似乎不再认识到viewdata值。我确定我必须在某些地方做错事,而我自己却无法弄清楚。
这是控制器动作代码
// POST: StaffMembers/Create
[HttpPost]
[ValidateAntiForgeryToken]
[PsAuditLog(AuditRecordType = 1)]
public async Task<ActionResult> Create(StaffMemberViewModel staff, params string[] selectedRoles)
{
if (ModelState.IsValid)
{
----unnecessary codes removed for brevity----
ViewData["ModificationType"] = 1;
ViewData["auditLogInitVals"] = "";
ViewData["auditLogFinVals"] = new JavaScriptSerializer().Serialize(StaffMember);
ViewData["recordId"] = StaffMember.Id;
TempData["msg"] = "Registration successfull. Login password has been sent to the newly created user's email supplied in the registration";
return RedirectToAction("View", new { id = StaffMember.Id });
}
--------为简洁而删除了不必要的代码------
和过滤器上下文中的代码如下
/// <summary>
/// Used to handle audit trail logs
/// </summary>
/// <param name="filterContext">
/// The endpoint being accessed for the action
/// </param>
public class PsAuditLogAttribute : ActionFilterAttribute
{
public int AuditRecordType { get; set; }
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
ClaimsIdentity identity = filterContext.HttpContext.User.Identity as ClaimsIdentity;
var userId = filterContext.HttpContext.User.Identity.GetUserId();
var request = filterContext.HttpContext.Request;
//var logRecord = filterContext.Controller.ViewData["logRecord"] as dynamic;
var initialValues = filterContext.Controller.ViewData["auditLogInitVals"] != null ? filterContext.Controller.ViewData["auditLogInitVals"] : null;
var finalValues = filterContext.Controller.ViewData["auditLogFinVals"] != null ? filterContext.Controller.ViewData["auditLogFinVals"] : null;
RecordModification modif = new RecordModification();
modif.AuditRecordTypeId = AuditRecordType;
modif.ModificationTime = DateTime.Now;
modif.IPAddress = request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? request.UserHostAddress;
modif.UrlAccessed = request.RawUrl;
modif.ApplicationUserId = userId ?? "Anonymous User";
modif.SessionId = DateTime.Now.ToString() + HttpContext.Current.Session.SessionID;
modif.UserAgent = request.Browser.Browser + " :: " + request.Browser.Version;
**modif.ModificationType = (ModificationType)filterContext.Controller.ViewData["ModificationType"];**
modif.RecordId = filterContext.Controller.ViewData["recordId"].ToString();
modif.FinalValues = Json.Encode(finalValues);
modif.InitialValues = Json.Encode(initialValues);
ApplicationDbContext db = new ApplicationDbContext();
db.RecordModifications.Add(modif);
db.SaveChanges();
base.OnActionExecuted(filterContext);
}
}
}
但是,带星号的行会引发以下错误:
对象引用未设置为对象的实例。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.NullReferenceException:不是对象引用 设置为对象的实例。
来源错误:
第89行:modif.SessionId = DateTime.Now.ToString()+ HttpContext.Current.Session.SessionID;第90行:
modif.UserAgent = request.Browser.Browser +&#34; ::&#34; + request.Browser.Version;第91行:modif.ModificationType = (ModificationType)filterContext.Controller.TempData [&#34; ModificationType&#34;]; 第92行:modif.RecordId = filterContext.Controller.TempData [&#34;的recordId&#34]。的ToString();第93行:
modif.FinalValues = Json.Encode(finalValues);
请引导我解决这个问题。
谢谢。