4

我正在使用这样的表单助手:

 @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>

出于某种原因,它在获取请求期间包含了我的 url 的 id 部分。我怎样才能删除它,所以它只是:

action="/File/Upload"

也只是为了让我明白,我也可以更改我的行动声明吗?

4

2 回答 2

0

我不明白您为什么要删除该id零件。

但要回答你的问题,是的,你可以。
这是你如何做到的。

首先根据Html.BeginForm(string actionName, string controllerName)尝试这个。

@using(Html.BeginForm("Upload", "File")
{
}

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

@using(Html.BeginForm(new RouteValueDictionary { { "controller", "File" }, { "action", "Upload" } })
{
}

这样,您可以指向一个完全不同的 Controller 的 Action Method
假设您在FileController,您可以将Form标签设置为 POST 到另一个控制器的操作方法。

@using(Html.BeginForm("AnotherUploadAction", "AnotherController"))
{
}

更好的是,如果您想通过名称引用 Url 路由,您可以使用BeginRouteForm() 方法。

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

@using(Html.BeginRouteForm("My-Route-Name"))
{
}
于 2013-04-17T21:50:10.143 回答
0

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

@using (Html.BeginForm("MyActionName", "MyControllerName", new { Id = "" }))

或者在你的情况下:

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

这将生成以下表单标签:

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

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

public ActionResult MyActionName(int id)
{
    RouteData.Values.Remove("Id");

    return View();
}
于 2018-12-04T15:31:56.210 回答