没有在视图中传递视图模型(ASP.NET MVC)

时间:2019-03-28 03:40:43

标签: asp.net-mvc asp.net-core razor

我是ASP.NET Core MVC的初学者,只是有关Get / Post操作方法的问题,下面是控制器的代码:

  public class CheckoutController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public IActionResult Index(UserBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }
            return RedirectToAction(nameof(Success));
        }

        public IActionResult Success()
        {
            return View();
        }

    }

我们可以看到,对于post方法,将视图模型传递给Index视图,而对于get方法则不是这样。 但是get和post的Index视图相同,如下所示:

@model UserBindingModel
@{
    ViewData["Title"] = "Checkout";
}
...
...
...

因此,当使用get方法时,没有模型传递给视图,但是视图模板的顶部有一个@model指令,因此它不应该引起空引用错误吗?

1 个答案:

答案 0 :(得分:1)

@model UserBindingModel告诉Razor引擎,模型的类型为UserBindingModel,它将变量Model声明为UserBindingModel type:

UserBindingModel Model;

因此,当您使用关键字Model时,它将引用您已定义的模型:

@Model.ID

因为它只声明了变量Model,所以不会出现大小写错误,但是当您输出UserBindingModel的变量/属性(例如,@ Model.ID)时,这些变量/属性尚未初始化并从控制器,您将得到错误:NullReferenceException: Object reference not set to an instance of an object.