如何将2个参数传递给Controller MVC中的操作

时间:2014-02-21 11:08:43

标签: jquery asp.net-mvc entity-framework asp.net-mvc-4

如果你觉得这个问题有点傻,请原谅。但我对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的内容? :)

1 个答案:

答案 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;
    }

输出 -

enter image description here