我是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指令,因此它不应该引起空引用错误吗?
答案 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.