从MVC中的剃刀视图访问模型

时间:2018-07-04 14:09:11

标签: c# asp.net-mvc razor

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

调用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>

2 个答案:

答案 0 :(得分:0)

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

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

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

对于第二个答案,如果要使用@model指令在视图中指定模型的类型,则必须在return View()方法调用中提供这种类型的实例。另外,您可以使用@model dynamic,它可以让您传递任何内容作为模型。 See this link

答案 1 :(得分:0)

问题在于您的get方法。

您的以下方法不返回任何模型。因此Model为null,因此会产生错误。

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