was*_*ali 3 c# asp.net-mvc asp.net-mvc-4
我是新来的,学习MVC.我发现了这个错误,我找不到解决方案.
我的控制器看起来像这样:
public class EmployeeDataController : Controller
{
public ActionResult Details(int idd)
{
EmployeeDataContext edc = new EmployeeDataContext();
EmployeeData employee= edc.employeedata.Single(emp => emp.id == idd);
return View(employee);
}
}
Run Code Online (Sandbox Code Playgroud)
从浏览器执行Details方法时(即http:// localhost:4166/EmployeeData/details/1)我收到此错误:
参数字典包含非可空类型'System.Int32'的参数'idd'的空条目,用于'MvcDemo1.Controllers.EmployeeDataController'中的方法'System.Web.Mvc.ActionResult Details(Int32)'.可选参数必须是引用类型,可空类型,或者声明为可选参数.参数名称:参数
任何帮助都可以很好地解决我的问题.
当我更新我的代码并尝试编译程序时,编译时没有错误,但是当我运行程序时,我得到一个错误
EmployeeData employee= edc.employeedata.Single(x=>x.id==id);
Run Code Online (Sandbox Code Playgroud)
**EntityFramework.SqlServer.dll中发生了'System.Data.Entity.Core.EntityCommandExecutionException'类型的异常,但未在用户代码中处理
附加信息:执行命令时发生错误定义**
当您访问诸如此类的URL时EmployeeData/details/1,MVC将使用您的路由来映射控制器,操作方法和要使用的参数.默认情况下,您将拥有的路径如下所示:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
使用您的URL,这表示EmployeeData将控制器,details操作方法和1带有名称的可选参数的值作为控制器id.您的参数被调用,idd因此未映射.由于参数被标记为可选,但在您的Details方法中它是不可为空的,因此会发生异常.
你有三种解决方法.
首先,您可以更改要使用的路线,idd而不是id:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{idd}",
defaults: new { controller = "Home", action = "Index", idd = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
其次,您可以更改Details要调用的方法中的参数id:
public ActionResult Details(int id)...
Run Code Online (Sandbox Code Playgroud)
最后,您可以在发送的参数中更改您用来显式的URL:
localhost:4166/EmployeeData/details?idd=1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3288 次 |
| 最近记录: |