使用Html.Beginform帮助时如何删除表单html标记中的ID部分?

时间:2013-04-17 21:32:16

标签: 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/123123" enctype="multipart/form-data" method="post">
</form>

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

action="/File/Upload"

另外,我理解,我是否也可以更改我的行动声明?

2 个答案:

答案 0 :(得分: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的行动方法 假设您在FileController,您可以将Form标记设置为POST到另一个控制器的操作方法。

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

更好的是,如果您想按名称引用Url路线,则可以使用BeginRouteForm( ) method

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

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

答案 1 :(得分:0)

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

@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();
}