控制器中的操作过载

时间:2012-03-12 15:35:25

标签: vb.net asp.net-mvc-3 razor

是否可以对控制器中的操作进行重载?我没有找到任何关于它的信息,当我尝试时,我收到了这个错误:

  

当前对控制器类型“InterviewController”的操作“创建”请求在以下操作方法之间是不明确的:   System.Web.Mvc.ViewResult类型>上的Create()MvcApplication4.MvcApplication4.InterviewController   System.Web.Mvc.ViewResult在类型> MvcApplication4.MvcApplication4.InterviewController上创建(Int32)

我试图以另一种方式做到这一点,我也得到了一个我无法解决的新错误。实际上,我创建了一个新动作(称为create_client而不是create)

我需要2种方法来创造“机会”。

  1. 我只是调用动作,我收到一个空的公式,我只需插入数据。
  2. 从客户端页面开始,我必须在向用户显示表单时已经完成的客户端创建“机会”。 (需要提高工作效率,用户必须尽快执行操作)。
  3. 在“机会”表中,我有一个名为“FK_opp_client”的列,它等于客户表中的“idClient”列。

    我不知道如何做第二种方式。

    我在控制器中创建了一个新动作。

        '
        ' GET: /Opportunite/Create_client
    
    Function Create_client(idclient) As ViewResult
        'Dim FK_Client = (From e In db.client
        'Where(e.idClient = idclient)
        '                    Select e.nomCompteClient).ToString()
        'ViewBag.FK_client = New SelectList(db.client, "idClient", "nomCompteClient", idclient)
        Dim opportunite As opportunite = db.opportunite.Single(Function(o) o.idOpportunite = 5)
        opportunite.FK_Client = idclient
        ViewBag.FK_Client = New SelectList(db.client, "idClient", "nomCompteClient", opportunite.FK_Client)
    
        Return View(opportunite)
    End Function
    

    我已经尝试了一些东西来获得我想要的东西,最后一个是复制“编辑”动作中所做的事情,但是对于空排名。 (所以我在我的数据库中创建了一个空排名)。我不认为这是一个好主意(想象有人想要更新idOpportunite = 5的数据库......)

    有更好的想法吗?

1 个答案:

答案 0 :(得分:1)

如果要将这两个方法保持在相同的名称下,则必须实现ActionSelectionAttribute来装饰它们,或者将它们与不同的动词一起使用(例如POST和PUT)。请阅读有关行动方法选择过程here的更多详细信息(旧的但仍然是真实的)。

不同的方法可能是制作参数optional并执行操作以检查是否已通过(通过可空类型)。