C# 如何在使用html.Beginform帮助程序时删除我的表单html标记中的ID部分?

C# 如何在使用html.Beginform帮助程序时删除我的表单html标记中的ID部分?,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我使用的表单帮助程序如下所示: @using (Html.BeginForm("Upload", "File", FormMethod.Post, new { enctype = "multipart/form-data"})) } 我的控制器的操作是: [HttpPost] public ActionResult Upload(HttpPostedFileBase file) { } 当我查看HTML时,生成的表单标记是: <form action="/File/Upload/1

我使用的表单帮助程序如下所示:

 @using (Html.BeginForm("Upload", "File", FormMethod.Post, new { enctype = "multipart/form-data"}))

}
我的控制器的操作是:

[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
}
当我查看HTML时,生成的表单标记是:

<form action="/File/Upload/123123" enctype="multipart/form-data" method="post">
</form>

同样,我也明白了,我可以更改我的操作声明吗?

我不明白您为什么要删除
id
部分

但要回答您的问题,是的,您可以。
这是你怎么做的

首先,请根据以下内容尝试此选项

如果这不起作用(或)仍然输入
id
值,请尝试使用此

这样,您就可以指向一个完全不同的控制器动作方法 假设您在
FileController
上,您可以将
表单
标记设置为发布到另一个控制器的操作方法

@using(Html.BeginForm("AnotherUploadAction", "AnotherController"))
{
}
更好的是,如果您想通过名称引用Url路由,可以使用

routes.MapRoute(
    name: "My-Route-Name",
    url: "RouteUpload",
    defaults: new { controller = "AnotherClass", action = "Upload" }
);

@using(Html.BeginRouteForm("My-Route-Name"))
{
}

为了防止
Id
包含在表单操作中,您可以使用RouteValues对象,但这里的关键是将
Id
设置为空字符串,如下所示:

@using (Html.BeginForm("MyActionName", "MyControllerName", new { Id = "" }))
或者在您的情况下:

@using (Html.BeginForm("Upload", "File", new { Id = "" }, FormMethod.Post, new { enctype = "multipart/form-data" }))
将生成以下表单标记:


或者,您可以将其从渲染视图的控制器中的
RouteData
中删除(尽管我更喜欢前者,因为它使意图更清晰):


我能问一下为什么吗?作为最后手段,您可以将其更改为普通的旧HTML。表单所在的页面的id为123123?对我来说很有用…IOW呈现时不带id,也不改变OP的
HTML.BeginForm
声明。我能想到的唯一一个id会出现在url中的原因是,如果您将对象的id成员作为第四个参数传入。有enctype@HaBo这不是一个有效的通知电话。无重载有5个参数,FormMethod作为第三个参数。他们正在使用,如果在htmlAttributes中设置了id,那么应该只传递id。我想删除b/c部分的id,那么我的表单帖子不会映射到操作方法
public ActionResult Upload(HttpPostedFileBase file)
,因为我猜的是id。所以我的答案应该可以。它会删除
id
部分,并且像您要求的那样,它也可以发布到其他控制器的操作方法。
routes.MapRoute(
    name: "My-Route-Name",
    url: "RouteUpload",
    defaults: new { controller = "AnotherClass", action = "Upload" }
);

@using(Html.BeginRouteForm("My-Route-Name"))
{
}
@using (Html.BeginForm("MyActionName", "MyControllerName", new { Id = "" }))
@using (Html.BeginForm("Upload", "File", new { Id = "" }, FormMethod.Post, new { enctype = "multipart/form-data" }))
public ActionResult MyActionName(int id)
{
    RouteData.Values.Remove("Id");

    return View();
}