MVC的NullReferenceException上@foreach(以型号VAR项) [英] MVC NullReferenceException on @foreach (var item in Model)

查看:1019
本文介绍了MVC的NullReferenceException上@foreach(以型号VAR项)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到下面的错误,读完这篇文章后,

I'm getting the below error, after reading through this

<一个href=\"http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it\">What是一个NullReferenceException,如何解决这个问题?

我明白了什么误差而不是如何它造成或如何解决它在我的情况,

I understand what the error is but not how its being caused or how to fix it in my case,

任何人能解释为什么吗?

Can anyone explain why?

错误:

System.NullReferenceException:未将对象引用设置到对象的实例

System.NullReferenceException: Object reference not set to an instance of an object.

这行错误:

@foreach(以型号VAR项目)

@foreach (var item in Model)

控制器:

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">&amp;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">&amp;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">&amp;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>

推荐答案

如果我没有理解错的一切,你会得到一个的NullReferenceException 当POST请求被发送到 CheckUser 控制器动作。此操作不会创建一个模型,并返回一个视图没有一个模型在这里:

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");

或此:

        return View("LogIn");

如果在其他的答案中提到你的模式是在你看来不是空你可以检查,但是这将导致只是避免了抛出异常,用户仍然看到一个空表。为了展示一些数据,你需要不直接从 CheckUser返回意见的方法,但重定向他们能找到的行动:

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");
    }
 }

这篇关于MVC的NullReferenceException上@foreach(以型号VAR项)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆