2012-07-09 170 views
4

在我MVC3應用程序,如果我在URL查詢字符串值類型,按回車鍵,我可以讓我輸入值:獲取查詢字符串值... MVC3

localhost:34556/?db=test 

我的默認動作是:

public ActionResult Index(string db) 

變量db在其中有「測試」。

現在,我需要提交一個表單和讀取查詢字符串值,但是當我通過jQuery提交表單:

 $('#btnLogOn').click(function(e) { 
     e.preventDefault(); 
      document.forms[0].submit(); 
     }); 

而下面是我送的形式:

@using (Html.BeginForm("LogIn", "Home", new { id="form1" }, FormMethod.Post)) 

繼承人的動作:

[HttpPost] 
    public ActionResult LogIn(LogOnModel logOnModel, string db) 
    { 
     string dbName= Request.QueryString["db"]; 
    } 

可變dbname是null,因爲的Request.QueryString [ 「DB」]爲空,所以變量數據庫被傳入,我不知道爲什麼。提交表單後,有人可以幫助我獲取查詢字符串變量嗎?謝謝

+1

查詢字符串將不會在窗體後可見文章:http://stackoverflow.com/questions/1116019/submitting-a-get-form-with-query-string-params-and-hidden-params-disappear – 2012-07-09 20:40:59

+0

感謝回覆,那麼我的選擇是什麼?我必須保留查詢字符串btw – BoundForGlory 2012-07-09 20:50:25

+0

另一種方法是在GET中使用查詢字符串來填充表單中的隱藏輸入。然後隱藏的輸入將會提交。 – 2012-07-09 20:53:22

回答

3

你可能有這樣的事情

控制器:

[HttpGet] 
public ActionResult LogIn(string dbName) 
{ 
    LogOnViewModel lovm = new LogOnViewModel(); 
    //Initalize viewmodel here 
    Return view(lovm); 

} 

[HttpPost] 
public ActionResult LogIn(LogOnViewModel lovm, string dbName) 
{ 
    if (ModelState.IsValid) { 
     //You can reference the dbName here simply by typing dbName (i.e) string test = dbName; 
     //Do whatever you want here. Perhaps a redirect? 
    } 
    return View(lovm); 
} 

視圖模型:

public class LogOnViewModel 
{ 
    //Whatever properties you have. 
} 

編輯:固定它爲您的需求。

+0

感謝您的評論。這看起來與我現在正在做的事很相似。從查詢字符串中獲取值的邏輯在哪裏? – BoundForGlory 2012-07-09 21:05:03

+0

Err,這個方法的要點是你沒有查詢字符串中的值,你只需將它賦值給窗體內的viewmodel即可。像@ Html.Textboxfor(model => model.dbName等)。如果你真的想把它放在URL中(SEO目的?),我認爲你可以在@using(Html.BeginForm(「LoginForm」,「Home」,new {.id =「form1」)中添加一個參數。dbName = YourFormFieldValueHere},FormMethod.Post)) – Saedeas 2012-07-09 21:08:56

+0

錯誤,我的問題是如何獲得查詢字符串值?沒有任何替代方法。如果我可以去另一條路線,我會的。但業務規則說我們使用查詢字符串,我不擁有公司。無論如何感謝 – BoundForGlory 2012-07-09 21:15:17

2

由於您使用POST,您正在查找的數據是Request.Form而不是Request.QueryString

+0

Thaks回覆,但Request.Form [「db」]也爲null。 – BoundForGlory 2012-07-09 20:49:40

1

As @ ThiefMaster♦說,在POST中,您不能擁有查詢字符串,如果您不希望將數據序列化到特定對象,則可以使用FormCollection Object,這可讓您獲取所有表單元素通過郵寄到服務器

例如

[HttpPost] 
public ActionResult LogIn(FormCollection formCollection) 
{ 
    string dbName= formCollection["db"]; 

} 
+0

FormCollection對象是否具有我的登錄信息?正在傳入的模型有用戶名/密碼等。 – BoundForGlory 2012-07-09 20:59:10

+0

它包含您在表單中傳遞的所有元素,如果您的登錄信息位於表單內部,它將位於formCollection – Jorge 2012-07-09 21:00:02