Html.TextBoxFor NullReferenceException using Razor syntax

本文关键字:Razor syntax using NullReferenceException TextBoxFor Html | 更新日期: 2023-09-27 17:55:39

我有一个非常简单的页面(我已经将其减少到几乎为零,看看我是否可以让它工作)。使用如下所示的 lambda 调用 Html.TextBoxFor 时会抛出 NullReferenceException。我试图弄清楚为什么会这样?

异常本身似乎得到了处理,因为它不会停止呈现页面,但我认为它根本不应该发生?文本框实际上按预期呈现正确(使用正则表达式和占位符)。

如果我将TextBoxFor换成PasswordFor也不会抛出 NullReferenceException。

视图:

@model Analytics.Sites.Frontend.Models.RegisterViewModel
<div>
    @using (Html.BeginForm("Register", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "centeralign", role = "form" }))
    {
        @Html.TextBoxFor(m => m.Email, new { @placeholder = "email@address.com" })
    }
</div>

视图模型

public class RegisterViewModel
{
    [Required]
    [Display(Name = "Email")]
    [DataType(DataType.EmailAddress)]
    [RegularExpression(@"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:'.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$", ErrorMessage = "The email address you entered is not valid.")]
    public string Email { get; set; }
}

例外:

System.NullReferenceException
   at lambda_method(Closure , RegisterViewModel )

想法?这是设计使然,它在内部抛出并捕获 NullReferenceException?

编辑:

控制器本身为空。

[Authorize]
public class AccountController : Controller
{
   [AllowAnonymous]
    public ActionResult Register()
    {
        return View();
    }
}

显然,这不是将模型实例传递给视图。更改为 return View(new RegisterViewModel) 将使 NRE 无效。这是这样做的预期方法吗?示例显示并非如此。

如果使用VS2013创建新的框架MVC项目,则其代码与帐户/注册方法上的代码相同。骨架项目也抛出(句柄?)相同的 NRE。这可能是设计使然?

Html.TextBoxFor NullReferenceException using Razor syntax

必须将模型的实例传递给视图:

 public ActionResult Register()
 {
      return View(new RegisterViewModel());
 }

这是 MVC 中的正确做法。如果没有模型实例,则无法访问模型上的属性。

如果您的视图正在呈现并绑定到模型,则需要将模型传递给视图。如果它是视图的初始 GET,则应传递一个空模型。