2016-08-30 97 views
0

我想發佈一個表單,其中一個變量是前一個URL的Action,但是無論何時我POST它,變量都變爲空。我如何堅持這個信息,至少在它達到POST Action之前?RequestContext.RouteData和Request.UrlReferrer信息在FormMethod.Post上丟失

我試過使用Url.RequestContext.RouteData.Values["action"]Request.UrlReferrer來獲得Action。

在我看來,我想發佈一個文件,行動名稱和ID:

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

如果我把它事情是這樣的,行動名稱爲空,但如果我從BeginForm方法中刪除FormMethod.Post部分,操作名稱已成功發佈且文件爲空。

回答

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成爲了形式的兩個屬性!

嘗試this overload在這裏你可以同時指定路由值和htmlAttributes

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

這將產生正確的形式action屬性值使用您提供的路由值。

+1

謝謝兄弟! :-) – Sicypher