【问题标题】:getting a null reference exception in View. Razor MVC C#在 View 中获取空引用异常。剃刀 MVC C#
【发布时间】:2019-08-16 09:16:58
【问题描述】:

当我尝试从我的视图访问模型属性时,我收到了Null reference Exception

我的观点是:

@page
@model WebApp.Pages.IndexModel
<p id="token" style="visibility: hidden;">@Model.Token</p>

我的模特是:

public class IndexModel : PageModel
{
    private string token = "token";

    public string Token{ get { return token; } }

    public IndexModel(string token)
    {
        this.token = token;
    }
}

我的控制器是:

public class PopUpAuthController : Controller
{
    public PopUpAuthController()
    {
    }

    public IActionResult Index()
    {
        return View(new IndexModel("TokenPlaceholder"));
    }
}

@Model.Token 向我抛出了异常。我尝试使用DataView["Token"] 进行设置和获取,但它会引发相同的异常。

我有非常非常简单的代码,但我无法解决这个错误。我希望你们能帮助我。

【问题讨论】:

  • 您确定token 有值吗?有没有调试过控制器方法看看有没有?
  • 是的,我调试了它,在调用View构造函数的那一刻它有一个值..很奇怪
  • 我很困惑。您使用控制器但声明了@page?你现在用什么? MVC 或 Razor 页面(不使用控制器)? Razor 页面独立于控制器和(不像名称所暗示的那样)而不是(数据传输或视图)模型。使用控制器和名为“索引”的操作时,您需要 Views/PopUpAuth/Index.cshtml 来呈现您的视图。或者您只是使用 Razor 页面并将您的逻辑放入 IndexModel 并丢弃您的控制器。不是两者都
  • 您必须选择一种技术(Razor 或 MVC)并使用它。您可以在同一个应用程序 (iirc) 中混合使用两者,但可以在 XxxModel 类中使用 RazorPages + Loginc,也可以使用带有 Controller + 相应视图的 MVC。

标签: c# asp.net-mvc asp.net-core model-view-controller


【解决方案1】:

您似乎在这里混合了剃须刀页面(带有@page 声明)和MVC。

您应该每页只使用一个,或者常规 cshtml Razor 视图(放置在名为 Views/PopUpAuth/Index.cshtml 的文件夹中)并使用常规 POCO 模型(不继承自 PageModel)。

或者,您只需使用剃刀视图并将您的逻辑放入PopUpAuthModelOnGet 方法并删除您的控制器。

您可以在同一个项目中使用两者,但不能在同一个端点/路由/页面上混合使用它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-08
    • 2012-05-06
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多