Asp.net mvc 如何实现重用创建和编辑视图的复制操作?

Asp.net mvc 如何实现重用创建和编辑视图的复制操作?,asp.net-mvc,vb.net,Asp.net Mvc,Vb.net,我想让我的用户能够使用Id=123单击现有实体,获取并复制该对象,然后让用户编辑该对象,并使用我用于创建或编辑的相同视图创建新对象。我尝试了以下行动方法: ' GET: /controller/copy/id Function Copy(ByVal id As Integer) As ActionResult Dim obj = db.MyTable.Find(id) If obj.IsNothing() Then Retu

我想让我的用户能够使用Id=123单击现有实体,获取并复制该对象,然后让用户编辑该对象,并使用我用于创建或编辑的相同视图创建新对象。我尝试了以下行动方法:

    ' GET: /controller/copy/id
    Function Copy(ByVal id As Integer) As ActionResult
        Dim obj = db.MyTable.Find(id)
        If obj.IsNothing() Then
            Return HttpNotFound()
        End If

        'blank out the id to flag that this is a new entity
        obj.Id = 0

        'reuse the editing view
        Return View("Edit", obj)
    End Function
这会很好地呈现,但表单HTML如下所示:

<form action="/Controller/Copy/123" method="post">
当我发回时,传递的模型对象Id=123,与正在复制的对象相同。我认为这一定是因为route/Controller/Copy/123的id位于第三个位置,模型绑定可以看到这一点


那个么,我应该如何实现复制,这样我就可以复制对象123,但却忘记了那个id,以避免这个问题呢?如果我应该使用完全不同的设计模式,也可以。

覆盖要使用的表单操作。这意味着将使用当前的URL。

如果我理解正确。。。。只需在FormRouteValues属性中将id设置为null或0

在剃刀中使用c

@using (Html.BeginForm("copy", "controller", FormMethod.Post, new { id = null /* or = 0 */ }))
// form code
在控制器中:

public ActionResult Copy(int? Id)
// action code

听起来您需要在单击副本时返回服务器并重新创建创建表单,但这次id不在那里,但其余的值都已输入。的可能重复项