在阅读了这个之后,我得到了以下错误
什么是NullReferenceException,我该如何修复它?
我知道错误是什么,但不知道它是如何引起的,也不知道在我的情况下如何修复它,
有人能解释一下原因吗?
错误:
System.NullReferenceException:对象引用未设置为对象的实例。
线路错误:
@foreach(模型中的var项)
控制器:
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();
}
}
}
视图:
@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 ( Model != null ) {
@foreach (var item in Model)
{
}
}
如果我正确理解了所有内容,当POST请求发送到CheckUser
控制器操作时,您会得到一个NullReferenceException
。此操作不会创建模型,并在此处返回没有模型的视图:
// redirect to view
return View("Index");
或此处:
return View("LogIn");
您可以检查您的Model
在您的视图中是否不为null,如其他答案中所述,但这将避免抛出异常,用户仍然会看到一个空表。要显示一些数据,您不需要直接从CheckUser
方法返回视图,而是将它们重定向到GET操作:
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");
}
}
@if(Model != null)
{
foreach (var item in Model)
{
// do your code
}
}
我认为某些或您的filterresults项的UserCode属性为null,这会产生异常。用更换过滤器
filterresults = filterresults.Where(x => x.UserCode != null
&& x.UserCode.ToString().Contains(filtername)).OrderBy(x => x.UserCode);
我对此很陌生,但我刚刚通过更改控制器解决了这个绝对的噩梦。我这样做了,而且效果很好。这是一个奇迹
public async Task<IActionResult> Administration()
{
return View(await _context.Cause.ToListAsync());
}