我正在使用表单助手:
@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"
另外,我理解,我是否也可以更改我的行动声明?
答案 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();
}