2012-05-23 63 views
2

我有一個帶有窗體的MVC3視圖,我想通過查詢字符串傳入參數。我的繼承人形式在MVC3中使用帶有表單的查詢字符串

@using (Html.BeginForm("LogOn", "Account", new { db = @Request.QueryString["db"] }, FormMethod.Post)) 

我的繼承人控制器

[HttpPost] 
public ActionResult LogOn(LogOnModel model,string db) 

當我點擊我的登錄按鈕,並通過代碼,帕拉姆分貝爲空。即時消息在傳遞這樣的:

http://localhost:64632/?db=someValue 

我的路線是這樣的:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{db}", // URL with parameters 
     new { controller = "Account", action = "LogOn", db = UrlParameter.Optional   } // Parameter defaults 
); 

我到底做錯了什麼?

+0

爲什麼不能在模型中將'db'作爲屬性,將其設置爲該頁面的負載(它必須設置在查詢字符串的某處),然後把它放在一個隱藏的字段中,這樣當你提交表單時你有價值。默認的MVC模型綁定FTW :) – mattytommo

+0

這是一個業務需求。當前的應用程序接受數據庫作爲查詢字符串參數,客戶端不想改變 – BoundForGlory

+1

我想知道我們是否可以在視圖中使用@ Request.QueryString [「db」]'。你檢查過這個值是否設置正確? –

回答

1

你的路線期待db是在URL中的令牌:

http://localhost:64632/Account/LogOn/someValue 

你可以搶在你的控制器中的查詢字符串值和DB參數存儲在ViewBag,它會顯示在您的形成。

+0

我希望我可以,但這是一個業務需求。另外,我認爲使用MVC,查詢字符串與您所描述的相同 – BoundForGlory

0

很好,這是一個GET方法鏈接: 「HTTP://本地主機:64632/DB = someValue中」

並且使用了HttpPost屬性。

+0

使用HttpPost屬性的方法仍然可以從查詢字符串接收參數。 – DMulligan

1

如果這是您擁有的唯一路線,那麼推測您目前所在的頁面看起來像「/ controller/action/dbValue」。在這種情況下,

@Request.QueryString["db"] 

不會獲取任何內容,因爲db是路由值,它不是查詢字符串的一部分。您可以使用

@ViewContext.RouteData.Values["db"] 

改爲。

1

它的工作原理。我正在做同樣的事情。我可以在http文章中檢索查詢字符串值:Request["queryparametername"]