【问题标题】:Accessing model from razor view in MVC从 MVC 中的剃刀视图访问模型
【发布时间】:2018-07-04 14:09:10
【问题描述】:

我在控制器和剃刀视图中有以下代码。

当Upload() 被调用时,我想以模型作为参数返回另一个视图,以便在视图中访问它。

但我在@Model.PhoneNumber

上不断收到“对象引用未设置为对象的实例”

另一个问题是模型必须是强类型的吗?当我传入new { PhoneNumber = "123456" } 时,似乎也无法从视图中访问该属性。

[HttpGet]
[Route("{code}/CertificateValidation")]
public ActionResult CertificateValidation()
{
    return View();
}

[HttpPost]
public ActionResult Upload(FormCollection file)
{
    return View("CertificateValidation", new IndexViewModel { PhoneNumber = "123456" });
}

查看:

model WebApplicationMVC.Models.IndexViewModel    
<p>@Model.PhoneNumber </p>

【问题讨论】:

  • “另一个问题是模型必须是强类型的吗?”那仍然是强类型;只是编译器创建类型而不是您创建类型。这种方法的问题是您在视图的这一部分中放置了什么:@model XXXXXX?你没有命名类型,所以你不能在那里放任何东西。

标签: c# asp.net-mvc razor


【解决方案1】:

问题在于您的 get 方法。

您的以下方法不返回任何模型。所以 Model 是 null 所以它给出了错误。

[HttpGet]
[Route("{code}/CertificateValidation")]
public ActionResult CertificateValidation()
{
    var model = new IndexViewModel();
    return View(model);
}

【讨论】:

    【解决方案2】:

    您使用模型返回视图的方式是正确的,应该没有任何问题。

    return View("CertificateValidation", new IndexViewModel { PhoneNumber = "123456" });
    

    也就是说,您的实际代码很可能不会像这样,并且可能会从某个来源(如可能的数据库)获取数据,这可能会返回 null,您可以通过调试或编写空检查来进行调查。

    对于第二个答案,如果您使用@model 指令在视图中指定模型的类型,则必须在返回 View() 方法调用中提供此类型的实例。或者,您可以使用@model dynamic,它允许您将任何东西作为模型传递。 See this link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      相关资源
      最近更新 更多