I'm getting the below error, after reading through this
What is a NullReferenceException, and how do I fix it?
I understand what the error is but not how its being caused or how to fix it in my case,
Can anyone explain why?
Error:
System.NullReferenceException: Object reference not set to an instance of an object.
Error on line:
@foreach (var item in Model)
Controller:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using TMTMonitorandCompare.Models;
namespace TMTMonitorandCompare.Controllers
{
public class HomeController : Controller
{
private MetaClone_2Entities db = new MetaClone_2Entities();
public ActionResult Index(string filtername)
{
var filterresults = from m in db.UserInfoes
select m;
filterresults = filterresults.Where(x => x.UserCode.ToString().Contains(filtername)).OrderBy(x => x.UserCode);
return View(filterresults);
}
public ActionResult Login()
{
return View("Login");
}
public ActionResult CheckUser()
{
//check username & password
if ((Request.Form["username"] == "user") && (Request.Form["password"] == "pass"))
{
// use forms auth class to set the cookie
FormsAuthentication.SetAuthCookie(Request.Form["username"], true);
// redirect to view
return View("Index");
}
else
{
return View("Login");
}
}
public ActionResult SessionTimeout()
{
return View();
}
public ActionResult ForgotPassword()
{
return View();
}
}
}
View:
@model IEnumerable<TMTMonitorandCompare.Models.UserInfo>
@{
ViewBag.Title = "Home Page";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<script>
$(document).ready(function () {
@*Validation for Text fields with name formpart*@
$('#SendRequest').click(function (e) {
var isValid = true;
$("input[type='text'][name='formpart']").each(function () {
if ($.trim($(this).val()) == '') {
isValid = false;
$(this).css({
"border": "1px solid red",
"background": "#FFCECE"
});
}
else {
$(this).css({
"border": "",
"background": ""
});
}
});
if (isValid == false)
e.preventDefault();
else
alert('Thank you for submitting');
});
$("#resultsgo").click(function () {
$("#basicModal2").modal('hide');
});
$("#bckpage").click(function () {
$("#basicModal3").modal('hide');
$("#basicModal2").modal('show');
});
$("#bcktostart").click(function () {
$("#basicModal3").modal('hide');
});
$("#SendRequest").click(function () {
var imei = ("IMEI: " + $("#imei").val());
$('#printImei').html(imei);
var phonenumber = ("Phone Number: " + $("#phoneNumber").val());
$('#printPhoneNumber').html(phonenumber);
var policynumber = ("Policy Number: " + $("#policyNumber").val());
$('#printPolicyNumber').html(policynumber);
});
@*Code for passing code (Should work)*@
$("#SendCodeRequest").click(function () {
var thecode = ("Code: " + $("#theCode").val());
$('#printCode').html(thecode);
});
@*Code for dropdowns ( not working)*@
$('#pickButton').dropdown();
$('#selectionDropdown li').on('click', function () {
$('#dropdown_title').html($(this).find('a').html());
});
});
</script>
<button type="button" class="btn btn-success pull-right" id="logonbutton" onclick="location.href = '@Url.Action("Logon", "Home")'">Logon</button>
<table class="table">
<thead>
<tr>
<th>New Request</th>
<th>Existing Request</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<form class="form-horizontal">
<div class="form-group">
<label class="control-label col-xs-2" for="imei">IMEI:</label>
<div class="col-xs-9">
<input type="text" class="form-control" id="imei" name="formpart" placeholder="IMEI">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2" for="phoneNumber">Phone Number:</label>
<div class="col-xs-9">
<input type="tel" class="form-control" id="phoneNumber" placeholder="Phone Number">
</div>
</div>
<div class="form-group">
<label for="platform" class="control-label col-xs-2">Policy Organisation:</label>
<div class="col-xs-10">
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
Select
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu2">
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">TMT Internals</a></li>
</ul>
</div>
</div>
</div>
<div class="form-group">
<label for="policyNumber" class="control-label col-xs-2">Policy Number:</label>
<div class="col-xs-10">
<input type="text" class="form-control" id="policyNumber" name="formpart" placeholder="Policy Number">
</div>
</div>
<div class="form-group">
<label for="platform" class="control-label col-xs-2">Platform:</label>
<div class="col-xs-10">
<div class="dropdown">
<button class="btn btn-default" id="pickButton" data-toggle="dropdown">
<span id="dropdown_title">Select</span>
<span class="caret"></span>
</button>
<ul class="dropdown-menu" id="selectionDropdown">
<li><a tabindex="-1" href="#">Android</a></li>
<li><a tabindex="-1" href="#">IOS</a></li>
<li><a tabindex="-1" href="#">Windows Phone</a></li>
</ul>
</div>
</div>
</div>
<div class="form-group">
<label for="diagnosticMode" class="control-label col-xs-2">Diagnostic Mode:</label>
<div class="col-xs-10">
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
Select
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu3">
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">Simple</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">Advanced</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">Mannual</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">Complete</a></li>
</ul>
</div>
</div>
</div>
<div class="form-group">
<div class="col-xs-offset-2 col-xs-10">
<a id="SendRequest" href="#" class="btn btn-success"
data-toggle="modal"
data-target="#basicModal">Create New Request</a>
<button type="submit" class="btn btn-primary">Back to List</button>
</div>
</div>
</form>
</td>
<td>
<div class="form-group">
<div class="col-xs-offset-2 col-xs-10">
<div class="span7 text-center">
<input type="text" class="form-control" id="theCode" placeholder="Please Enter Code">
<input type="submit" value="Go!" class="btn btn-success" id="sendcoderequest" data-toggle="modal"
data-target="#basicModal2" />
</div>
</div>
</div>
@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{
<p>
<label for="platform" class="control-label">Enter Code:</label><br />
@Html.TextBox("filtername")
<input type="submit" value="Filter" />
</p>
}
<div class="modal fade" id="basicModal" tabindex="-1" role="dialog" aria-labelledby="basicModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="myModalLabel">Summary</h4>
</div>
<div class="modal-body">
<span id="printImei"></span><br />
<span id="printPhoneNumber"></span><br />
<span id="printPolicyNumber"></span>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="basicModal2" tabindex="-1" role="dialog" aria-labelledby="basicModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="myModalLabel">Summary</h4>
</div>
<div class="modal-body">
<h2>Results</h2>
<span id="printCode"></span><br />
<div class="pull-right"><button type="submit" class="btn btn-success" id="toggle">Toggle</button> </div>
<table class="table">
<thead>
<tr>
<th></th>
<th>Date</th>
<th>Test Type</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
<input type="checkbox">
</td>
<td>
@Html.DisplayFor(modelItem => item.CreationDateTime)
</td>
<td>
@Html.DisplayFor(modelItem => item.AppModeId)
</td>
</tr>
}
</tbody>
</table>
<div class="form-group">
<div class="col-xs-offset-2 col-xs-10">
<a href="#" class="btn btn-success"
data-toggle="modal"
data-target="#basicModal3" id="resultsgo">Go!</a>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-success">Save changes</button>
<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div class="modal fade modal-lg" id="basicModal3" tabindex="-1" role="dialog" aria-labelledby="basicModal3" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="myModalLabel">Summary</h4>
</div>
<div class="modal-body">
<h2 id="tableheading">Comparison</h2>
<div class="btn-toolbar">
<div class="btn-group pull-left">
<button type="button" class="btn btn-success" id="bcktostart">Back to Start</button>
<button type="button" class="btn btn-success" id="bckpage">Back a Page</button>
</div>
<div class="btn-group pull-right">
<button type="button" class="btn btn-success" id="singlebutton">Single</button>
<button type="button" class="btn btn-success" id="multibutton">Multi</button>
</div>
</div>
<script>
$(document).ready(function () {
$("#Table1").hide()
$("#Table2").hide()
});
$("#multibutton").click(function () {
$("#Table2").hide()
$("#Table1").show()
$("#tableheading").text('Multi-Comparision');
});
$("#singlebutton").click(function () {
$("#Table1").hide()
$("#Table2").show()
$("#tableheading").text('Single-Comparision');
});
</script>
<table class="table table-striped" id="Table1">
<thead>
<tr>
<th>Phone 1</th>
<th>Phone 2</th>
<th>Phone 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>***Result***</td>
<td>***Result***</td>
<td>***Result***</td>
</tr>
</tbody>
</table>
<table class="table table-striped" id="Table2">
<thead>
<tr>
<th>Phone 1</th>
</tr>
</thead>
<tbody>
<tr>
<td>***Result***</td>
</tr>
</tbody>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-success">Save changes</button>
<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</td>
</tr>
</tbody>
If I understand everything correctly, you get a NullReferenceException
when a POST request is sent to CheckUser
controller action. This action doesn't create a model and returns a view without a model here:
// redirect to view
return View("Index");
or here:
return View("LogIn");
You can check if your Model
is not null in your view as mentioned in other answers, but this will result in just avoiding an exception to be thrown, users will still see an empty table. To show some data you need not to return views directly from CheckUser
method but redirect them to GET actions:
public ActionResult CheckUser()
{
//check username & password
if ((Request.Form["username"] == "user") && (Request.Form["password"] == "pass"))
{
// use forms auth class to set the cookie
FormsAuthentication.SetAuthCookie(Request.Form["username"], true);
// redirect to view
return RedirectToAction("Index");
}
else
{
return RedirectToAction("Login");
}
}