如果你觉得这个问题有点傻,请原谅。但我对MVC很新。
据我所知,这些行动旨在使无国籍人士工作。 因此,客户端应该将对象的ID传递给Actions,我们将使用存储库(EF)来查找对象并执行我们喜欢的操作。我的问题是对象和艺术家之间存在多对多的关系。
当我在对象的编辑页面上时,我想在弹出菜单上找到Artist,并将Artist添加到我正在编辑的对象中。因此我在ObjectController中创建了一个AddArtistToObject动作,如下所示
public ActionResult AddArtistToObject(int ObjectID, int ArtistID){
//code goes here
}
因此弹出菜单打开,并有一个搜索区域来搜索艺术家。你得到艺术家匹配的列表。然后每一行都有一个选择按钮。选择按钮href包含ArtistID。
我相信我也需要在URL中附加ObjectID。
网址变为:http://domain.com/Object/AddArtistToObject/ArtistID 并通过使用jquery我得到objectID并在URL中附加ObjectID以使URL像http://domain.com/Object/AddArtistToObject/ArtistID/ObjectID
例如,实际的URL变为 http://domain.com/Object/AddArtistToObject/54/43
您认为这个网址是否也令人困惑?如果我能改变像http://domain.com/Object/AddArtistToObject?ObjectID=43+ArtistID=54
这样的URl,那就不会更好然后在动作中,我使用下面的ID检索对象和艺术家
var artist = repository.Artist.First(d=>d.ArtistID==ArtistID);
repository.Object.First(d=>d.ObjectID==ObjectID).Artists.Add(artist);
objectsRep.Update();
objectsRep.SaveChanges();
问题是路由根本不会在此操作中结束。我把断点但是这个动作根本没有被调用。我该如何更改URL以调用此操作?您是否也认为这种方法是对的,或者我应该在开始之前阅读更多有关MVC的内容? :)
答案 0 :(得分:2)
http://domain.com/Object/AddArtistToObject?ObjectID=43+ArtistID=54
应该用&
替换 +http://domain.com/Object/AddArtistToObject?ObjectID=43&ArtistID=54
然后您的控制器操作将使用默认路径 -
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
控制器操作是 -
public ActionResult AddArtistToObject(int ObjectID, int ArtistID)
{
return null;
}
输出 -