FormMethod.Post

时间:2016-08-30 20:56:53

标签: c# asp.net-mvc

我正在尝试发布一个表单,其中一个变量是前一个URL的Action,但每当我发布它时,变量都变为null。我怎样才能坚持这些信息至少直到它到达POST动作?

我已尝试同时使用Url.RequestContext.RouteData.Values["action"]Request.UrlReferrer来获取操作。

在我的视图中,我尝试POST文件,操作名称和ID:

Html.BeginForm("Edit", "Expenses", FormMethod.Post, new { enctype = "multipart/form-data", actionName = actionName, id = idInt })

如果我保持原样,Action名称为null,但如果我从BeginForm方法中删除 FormMethod.Post 部分,则Action名称已成功发布且文件为null

1 个答案:

答案 0 :(得分:1)

您正在错误地使用Html.BeginForm帮助程序方法!您将路由值和html属性混合到一个对象!

您当前的通话符合以下超载

public static MvcForm BeginForm(
    this HtmlHelper htmlHelper,
    string actionName,
    string controllerName,
    FormMethod method,
    IDictionary<string, object> htmlAttributes
)

最后一个参数是 htmlAttributes 。因此,使用您的代码,它将生成表单标记标记,如此

<form action="/Expenses/Edit" actionname="someActionName" enctype="multipart/form-data"
                                                                     id="22" method="post">

</form>

您可以看到Idaction成为表单的2个属性!

尝试this overload,您可以在其中指定路线值和htmlAttributes

@using (Html.BeginForm("AddToCart", "Home",  new {  actionName = "Edit", id = 34 },
                                 FormMethod.Post,new { enctype = "multipart/form-data", }))
{
        <input type="submit"/>
}

将使用您提供的路线值生成正确的表单操作属性值。