嵌入式if子句中的NullReferenceException

时间:2013-06-19 23:09:37

标签: javascript asp.net-mvc razor

我目前正在尝试编写一个忘记密码页面,用户输入其用户名,电子邮件地址以及将发送给网站管理员的消息。 我想要的是以下内容: 用户单击按钮后,如果关联用户名和电子邮件地址,则应检查用户名和电子邮件地址。 (这些值保存在我的数据库中) 我设法编程了所有东西,但我有一个我无法解决的问题。 每次Razor引擎呈现页面时,我都会得到NullReferenceException,用户代码未处理。 我知道为什么会这样,但正如我所说,我无法解决这个问题。

以下是代码:

@model MvcApplication1.ViewModels.ContactAdminViewModel
@using MvcApplication1.Queries
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <script src="@Url.Content("~/Scripts/jquery-1.7.1.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" />
    <title>SendMail</title>
</head>
<body>
    @using (Html.BeginForm("SendMail", "ContactAdmin", FormMethod.Post))
    {
        @Html.ValidationSummary(true) 
        <div>
            <p>
                @Html.LabelFor(m => m.username, "username")
                @Html.EditorFor(m => m.username)
                <p>
                    @Html.ValidationMessageFor(m => m.username)
                </p>
            </p>
            <p>
                @Html.LabelFor(m => m.email, "email")
                @Html.EditorFor(m => m.email)
                <p>
                    @Html.ValidationMessageFor(m => m.email)
                </p>
            </p>
            <p>
                @Html.LabelFor(m => m.message, "Your message")
                <p>
                    @Html.TextAreaFor(m => m.message, new { cols = "35", rows = "10", @style = "resize:none" })
                    <p>
                        @Html.ValidationMessageFor(m => m.message)
                    </p>
                </p>
            </p>

            <p>
                <input id="send-mail" type="submit" class="button" value="Send" />
            </p>
        </div>

        <script type="text/javascript">
            $(document).ready(function () {
                jQuery('#send-mail').click(function () {
                    @if (@DQL.CheckUsernameAndEmail(Model.username, Model.email))
                    {
                        <text>
                    alert("Your Message will be sent");
                    </text>

                    }

                    else
                    {
                        <text>
                    alert("Your username is not associated with the email adress");
                    </text>
                    }


                });
            });
        </script>


    }
</body>
</html>

有关如何解决该问题的任何提示都非常感谢:)

修改

DQL.cs是一个C#类,我写下了我的所有查询。 它实际上是null的模型。我忘记写了:/我真的很抱歉。 不过,这里是DQL.cs中的代码,用于检查用户名是否与电子邮件地址相关联:

    public static bool CheckUsernameAndEmail(string username, string email)
    {
        bool validateUser = false;

        var query = from u in db.User
                    where (u.email.Equals(email) && u.username.Equals(username))
                    select u;

        if (query.Count() != 0)
            validateUser = true;

        return validateUser;
    }

这是控制器代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.ViewModels;
using MvcApplication1.Database_Queries;

namespace MvcApplikation1.Controllers
{
    public class ContactAdminController : Controller
    {
        [HttpGet]
        public ActionResult SendMail()
        {
            return View();
        }

        [HttpPost]
        public ActionResult SendMail(ContactAdminViewModel contactAdmin)
        {

            if (ModelState.IsValid)
            {
                if (DQL.CheckUsernameAndEmail(contactAdmin.username, contactAdmin.email))
                {
                    MvcApplication1.Mail.SendMail.SendForgotPassword(contactAdmin.username, contactAdmin.email, contactAdmin.message);
                    return RedirectToAction("LogIn", "Account");
                }
            }
            else
            {
                ModelState.AddModelError("", "Your username is not associated with the email adress");
                return RedirectToAction("LogIn", "Account");
            }

            return RedirectToAction("LogIn", "Account");
        }

    }
}

1 个答案:

答案 0 :(得分:1)

如果这是NullReferenceException

if (@DQL.CheckUsernameAndEmail(Model.username, Model.email))

然后它是因为DQL为空,Model为空,或CheckUsernameAndEmail中的某些代码抛出该异常。我们在这个问题中没有足够的上下文来了解DQL是什么,并且您的模型的填充是在您的控制器操作中完成的,该操作未在此问题中发布。发布CheckUsernameAndEmail的代码也可能会有所帮助。

基本上,只要你得到NullReferenceException,就意味着你有一个空引用。

<强>更新

感谢您提供最新信息!如果您在执行Razor视图时不希望Model为空,请务必向ViewResult添加模型:

[HttpGet]
public ActionResult SendMail()
{
    var model = new ContactAdminViewModel();
    // Populate your model with the appropriate data

    return View(model);
}