I have a web application with this controller:
public class ServiceRequestController : Controller
{
[Authorize(Roles = "Customer")]
public ActionResult Create()
{
return View();
}
[Authorize(Roles = "Customer")]
public ActionResult CreateNewUserAccount()
{
return View();
}
[Authorize(Roles = "Customer")]
[HttpPost]
public ActionResult CreateNewUserAccount(ServiceRequest serviceRequest)
{
if (ModelState.IsValid)
{
serviceRequest.Log.Id = User.Identity.GetUserId().ToString();
serviceRequest.Log.DateTimeLogged = System.DateTime.Now;
serviceRequest.LogID = db.Logs.Max(item => item.LogID);
serviceRequest.EstimatedResolveDate serviceRequest.CalculateEstimatedResolveDate();
db.ServiceRequests.Add(serviceRequest);
db.SaveChanges();
return RedirectToAction("AllServiceRequests", "Log");
}
return View(serviceRequest);
}
The serviceRequest.Log.Id = User.Identity.GetUserId().ToString();
(And any preceding line if this is commented out) throws a null reference exception. I presume the serviceRequest is somehow null?
The ActionLink which requests the CreateNewUserAccount() page is:
@Html.ActionLink("New User Account", "CreateNewUserAccount", "ServiceRequest")
I'm not sure how to resolve this exception?
The model is:
public partial class ServiceRequest
{
public int ServiceRequestID { get; set; }
public Nullable<int> LogID { get; set; }
public string RequestType { get; set; }
[DisplayName("Additional Information")]
[Required]
[StringLength(200)]
public string AdditionalInformation { get; set; }
public DateTime EstimatedResolveDate { get; set; }
[Required]
[DisplayName("Delivery Date")]
public DateTime DeliveryDate { get; set; }
public virtual Log Log { get; set; }
public DateTime CalculateEstimatedResolveDate()
{
return System.DateTime.Now.AddDays(3);
}
}
View code:
@model OfficiumWebApp.Models.ServiceRequest
@{
ViewBag.Title = "New User Account";
}
@using(Html.BeginForm("CreateNewUserAccount", "ServiceRequest", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.RequestType, new { @class = "control-label col-md-2" })
<div class="col-md-3">
<div class="editor-field">
@Html.TextBoxFor(model => model.RequestType, new { @Value = ViewBag.Title, @readonly = "readonly" })
@Html.ValidationMessageFor(model => model.RequestType)
</div>
</div>
</div>
<div class="form-group">
@Html.Label("Name of Account Holder", new { @class = "control-label col-md-2" })
<div class="col-md-3">
<div class="editor-field">
@Html.TextBox("AccountName")
@Html.ValidationMessageFor(model => model.RequestType)
</div>
</div>
</div>
<div class="form-group">
@Html.Label("Department", new { @class = "control-label col-md-2" })
<div class="col-md-3">
<div class="editor-field">
@Html.TextBox("Department")
@Html.ValidationMessageFor(model => model.RequestType)
</div>
</div>
</div>
<div class="form-group">
@Html.Label("Location", new { @class = "control-label col-md-2" })
<div class="col-md-3">
<div class="editor-field">
@Html.TextBox("Location", null, new { id = "Location" }))
@Html.ValidationMessageFor(model => model.RequestType)
</div>
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.AdditionalInformation, new { @class = "control-label col-md-2" })
<div class="tags">
<div class="col-md-10">
@Html.TextAreaFor(model => model.AdditionalInformation)
@Html.ValidationMessageFor(model => model.AdditionalInformation)
</div>
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.DeliveryDate, new { @id = "VisitDateLabel", @class = "control-label col-md-2" })
<div class="col-md-3">
<div class="editor-field">
@Html.JQueryUI().DatepickerFor(model => model.DeliveryDate).Inline(false)
@Html.ValidationMessageFor(model => model.DeliveryDate)
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-floppy-save"></span></button>
</div>
</div>
</div>
}