我正在使用表单助手,如下所示:

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

出于某种原因,它在get请求期间包含了我的url的id部分。 如何删除它只是:

action="/File/Upload"

我也理解,我也可以改变我的行动声明吗?

===============>>#1 票数:0

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

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

首先尝试基于Html.BeginForm(字符串actionName,字符串controllerName)

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

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

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

有了它,你可以指向一个完全不同的Controller的Action方法
假设你在FileController ,你可以将你的Form标签设置为POST到另一个控制器的action方法。

@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"))
{
}

===============>>#2 票数: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();
}

  ask by loyalflow translate from so

未解决问题?本站智能推荐: