"System.Int32" 的 NULL 值
NULL value for "System.Int32"
我读了 Freeman 的书 "ASP.NET MVC5",并尝试将管理页面添加到我的站点。现在,当我转到页面 http://localhost:63843/Admin/Edit 时,出现错误:
参数字典包含一个条目,参数 "productId" 类型 "System.Int32" 的值为 NULL,不允许值为 NULL,"System.Web.Mvc.ViewResult Edit (Int32)" 的方法在 "SportsStore.WebUI.Controllers.AdminController"。一个可选参数必须是一个引用类型,类型,允许值为NULL,或者它必须被声明为一个选项。
参数名称:parameters
public class AdminController : Controller
{
private IProductRepository repository;
public AdminController(IProductRepository repo) {
repository = repo;
}
public ViewResult Edit(int productId) {
Product product = repository.Products
.FirstOrDefault(p => p.ProductID == productId);
return View(product);
}
}
但是这里是对 Edit 的所有引用,没有任何 NULL 值:
Product p1 = target.Edit(1).ViewData.Model as Product;
Product p2 = target.Edit(2).ViewData.Model as Product;
Product p3 = target.Edit(3).ViewData.Model as Product;
Product result = (Product)target.Edit(4).ViewData.Model;
当我评论它时,没有任何改变。
我无法理解,NULL值在哪里。
您的操作需要一个参数 int
而您没有传递 it.if 您在浏览器中输入 /Edit?ProductId=1` 它会工作,或使操作参数可为空。
public ViewResult Edit(int? ProductId)
现在不会抛出错误了。
空值来自于访问http://localhost:63843/Admin/Edit without specifying the productId
, as in http://localhost:63843/Admin/Edit?productId=1.
您可以通过使 productId
为空来使其成为可选的:
public ViewResult Edit(int? productId)
{
...
}
问题出在方法声明中:
public ViewResult Edit(int productId)
您需要 productId,但没有传递它:http://localhost:63843/Admin/Edit. URL should be: http://localhost:63843/Admin/Edit/1
在你的行中
public ViewResult Edit(int productId) {
您将参数 productId
定义为 int
。该消息仅说明 this 必须是可为 null 的参数或可选参数。所以要么把它改成
// nullable
public ViewResult Edit(int? productId) { ... }
或
// optional
public ViewResult Edit(int productId = -1) { ... }
所以 Edit
的任何调用都将接受传入的 null
- 不管这是否会发生。
将参数设为整型怎么样? ans 在函数内设置一个断点来分析stacktrace/ callhirarchy 找出谁尝试了null-call ..?
我读了 Freeman 的书 "ASP.NET MVC5",并尝试将管理页面添加到我的站点。现在,当我转到页面 http://localhost:63843/Admin/Edit 时,出现错误:
参数字典包含一个条目,参数 "productId" 类型 "System.Int32" 的值为 NULL,不允许值为 NULL,"System.Web.Mvc.ViewResult Edit (Int32)" 的方法在 "SportsStore.WebUI.Controllers.AdminController"。一个可选参数必须是一个引用类型,类型,允许值为NULL,或者它必须被声明为一个选项。 参数名称:parameters
public class AdminController : Controller
{
private IProductRepository repository;
public AdminController(IProductRepository repo) {
repository = repo;
}
public ViewResult Edit(int productId) {
Product product = repository.Products
.FirstOrDefault(p => p.ProductID == productId);
return View(product);
}
}
但是这里是对 Edit 的所有引用,没有任何 NULL 值:
Product p1 = target.Edit(1).ViewData.Model as Product;
Product p2 = target.Edit(2).ViewData.Model as Product;
Product p3 = target.Edit(3).ViewData.Model as Product;
Product result = (Product)target.Edit(4).ViewData.Model;
当我评论它时,没有任何改变。 我无法理解,NULL值在哪里。
您的操作需要一个参数 int
而您没有传递 it.if 您在浏览器中输入 /Edit?ProductId=1` 它会工作,或使操作参数可为空。
public ViewResult Edit(int? ProductId)
现在不会抛出错误了。
空值来自于访问http://localhost:63843/Admin/Edit without specifying the productId
, as in http://localhost:63843/Admin/Edit?productId=1.
您可以通过使 productId
为空来使其成为可选的:
public ViewResult Edit(int? productId)
{
...
}
问题出在方法声明中:
public ViewResult Edit(int productId)
您需要 productId,但没有传递它:http://localhost:63843/Admin/Edit. URL should be: http://localhost:63843/Admin/Edit/1
在你的行中
public ViewResult Edit(int productId) {
您将参数 productId
定义为 int
。该消息仅说明 this 必须是可为 null 的参数或可选参数。所以要么把它改成
// nullable
public ViewResult Edit(int? productId) { ... }
或
// optional
public ViewResult Edit(int productId = -1) { ... }
所以 Edit
的任何调用都将接受传入的 null
- 不管这是否会发生。
将参数设为整型怎么样? ans 在函数内设置一个断点来分析stacktrace/ callhirarchy 找出谁尝试了null-call ..?