每个插入 cshtml 页面都会出现相同的错误

Posted

技术标签:

【中文标题】每个插入 cshtml 页面都会出现相同的错误【英文标题】:every insert cshtml page getting same error 【发布时间】:2021-11-10 05:37:37 【问题描述】:

我的项目中有 4 个模型类。每个模型类都有插入页面。在我的每个插入数据页面中,我都收到与System.NullReferenceException 相同的错误。此错误显示在每个 @html.EditorFor 属性中。

假设,我的插入数据页面(cshtml 页面)中有 3 个输入属性,然后在每个属性中显示与 System.NullReferenceException 相同的错误。我不明白为什么会这样?请看附图。我无法调试它,因为错误显示在 cshtml 页面中。请帮我解决这个错误。

当我在我的方法中实例化模型类并传递给查看页面时,它起作用了。但是现在我很想知道是否这样,为什么实体框架构建的方法没有实例化模型类并传递给查看页面。

public ActionResult Create()

    return View();


[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "UserId,UserName,Password,Department,LocalLvl,Status")] UserModel userModel)

    if (ModelState.IsValid)
    
        db.UserModels.Add(userModel);
        db.SaveChanges();
        return RedirectToAction("Index");
    

    return View(userModel);

上面的方法是由实体框架脚手架过程创建的,为什么不实例化模型类。之前,我的项目运行成功,然后突然开始显示错误?请帮忙。

【问题讨论】:

您是否将实例化模型从控制器传递到视图?按照惯例,您需要在视图顶部声明要传递给视图的类型。 @model YourNameSpace.Models.YourViewModel 确保为您的 GET/POST 方法返回模型到视图。例如:return View(model); 【参考方案1】:

预计您已在页面顶部定义了@model,该页面应接收该类型的对象。

@model YourProject.Models.LoginModel

并确保您已返回模型实例以传递给您的视图。否则,@model 将是 null

public ActionResult Login()

    // Implementation
    var model = new LoginModel();

    return View(model);


[HttpPost]
public ActionResult Login(LoginModel model)

    // Implementation

    return View(model);


参考文献

Strongly typed models and the @model directive

【讨论】:

感谢您的回答,它奏效了。但是为什么默认的 create 方法不实例化模型类呢?以及我是如何突然开始出错的。请你也建议/回复一下。 您好,很高兴我的回答对您有所帮助。因为视图预计会收到@model,如果没有通过控制器返回模型来查看,@model 将没有价值,因此它是null。您可以阅读我在参考资料中分享的文章。本教程将帮助您了解和熟悉 ASP.NET MVC。

以上是关于每个插入 cshtml 页面都会出现相同的错误的主要内容,如果未能解决你的问题,请参考以下文章

在cshtml文件中的C#块代码之间插入html标签

如果 .cshtml 文件中存在 razor/C# 错误,如何在 VS 2013 中使构建失败? [复制]

多租户 Razor 页面

如何在 mvc4 中使用 href 链接 cshtml 页面

Facebook 评论插件 - 每个页面都有相同的评论

如何将变量从一个剃须刀页面传递到另一个?