我目前正在尝试编写一个忘记密码页面,用户输入其用户名,电子邮件地址以及将发送给网站管理员的消息。 我想要的是以下内容: 用户单击按钮后,如果关联用户名和电子邮件地址,则应检查用户名和电子邮件地址。 (这些值保存在我的数据库中) 我设法编程了所有东西,但我有一个我无法解决的问题。 每次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");
}
}
}
答案 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);
}