我几乎没有开始使用ASP.NET MVC项目类型的第一个项目,我正在创建一个Details页面,而不是传递模板化(int id),我想传递一个字符串。但是当我处于调试模式并在URL中输入时,“myString”为空。为什么这样?我还需要改变别的什么吗?
所以,如果我转到URL并输入:
http://localhost:2345/Bank/EmployeeDetails/3d34xyz
public ActionResult EmployeeDetails(string myString) // myString is null
{
return View();
}
答案 0 :(得分:36)
在Global.asax.cs
文件中,默认情况下会映射以下路由:
routes.mapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
这意味着,http://localhost:2345/Bank/EmployeeDetails/3d34xyz
这样的网址将转到Bank
控制器,EmployeeDetails
操作,并将值3d34xyz
传递给名为id
的参数。传递一个字符串是完全正常的,但为了使其工作,你有两个选择:
1)在操作方法中将变量重命名为id
。
public ActionResult EmployeeDetails(string id) { ... }
2)添加另一个匹配字符串所需名称的路径。确保使其比默认路由更具体,并将放在 Global.asax.cs
文件中的默认路由之前。
routes.mapRoute(
"BankEmployeeDetails"
"Bank/EmployeeDetails/{myString}"
new { controller = "Bank", action = "EmployeeDetails", myString = UrlParameter.Optional });
如果网址中未传递任何值,则会将默认值null
传递给myString
,但如果您指定了网址,则会传递值3d34xyz
。
答案 1 :(得分:4)
假设您尚未修改默认路由(在Global.asax.cs中):
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
该方法希望将其命名为“id”。
答案 2 :(得分:3)
如果您使用的是默认路由表,请将myString
重命名为id
。
答案 3 :(得分:2)
将myString
的名称更改为id
。
答案 4 :(得分:0)
我遇到了同样的问题,您只需要在页面中提供详细信息超链接的ID(在此处的银行页面中)
@Html.ActionLink("Details", "Details", new { id=""})
这解决了我的问题,希望它可以帮助你。
这适用于MVC 5.
答案 5 :(得分:0)
当您尝试了所有这些选项,但仍然返回null时,请为Visual Studio完全重新启动。最终这对我有所帮助。