我花了几个小时试图找出当我尝试获取单个对象时,为什么我的编辑操作没有捕获UserId值。
这不起作用
[HttpGet]
public ActionResult Edit(string userId)
{
var user = _profile.ClubProfiles.First(u => u.UserId == userId);
var model = new EditUserViewModel();
model.PhoneNumber = user.MyUser.PhoneNumber;
model.FirstName = user.FirstName;
model.LastName = user.LastName;
model.UserId = user.UserId;
return View(model);
}
这有效
[HttpGet]
public ActionResult Edit(string Id)
{
var user = _profile.ClubProfiles.First(u => u.UserId == Id);
var model = new EditUserViewModel();
model.PhoneNumber = user.MyUser.PhoneNumber;
model.FirstName = user.FirstName;
model.LastName = user.LastName;
model.UserId = user.UserId;
return View(model);
}
为什么第二个参数(字符串Id)工作而不是第一个参数(字符串userId)?
这是我的索引视图中的路线
@Html.ActionLink("Edit", "Edit", new { id = item.UserId })
这是我的默认路线
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Profile", action = "Index", id = UrlParameter.Optional }
);
答案 0 :(得分:2)
您应该知道,在Global.asax.cs
文件的某个位置,有一个名为RegisterRoutes
的方法,其中包含以下内容:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
这意味着当您致电(例如)网址yourController/edit/123
时,它会搜索名为yourController
的控制器,这个方法名为edit
,id
为一个参数。这是默认情况下,当然您可以更改它并使用这些路径执行您需要的任何操作。
但是,如您所见,这是在搜索id
,而不是userId
,我认为这是您的解释,如果我错了,请告诉我。