2013-07-09 11 views
4

在我控制我的行動:ASP MVC HTTP與對象獲取行動參數

[HttpGet] 
public ActionResult CreateAdmin(object routeValues = null) 
{ 
    //some code 
    return View(); 
} 

和HTTP POST:

[HttpPost] 
public ActionResult CreateAdmin(
    string email, 
    string nameF, 
    string nameL, 
    string nameM) 
{ 
     if (email == "" || nameF == "" || nameL == "" || nameM == "") 
     { 
      return RedirectToAction("CreateAdmin", new 
      { 
       error = true, 
       email = email, 
       nameF = nameF, 
       nameL = nameL, 
       nameM = nameM, 
      }); 
    } 

http get Action變量routeValues總是空的。如何正確傳遞對象作爲參數到[http get] Action

+0

要獲取的參數可以以查詢字符串的形式從URL傳遞。您在RouteValues中獲得什麼期望? – shahkalpesh

+0

正在寫一個包含那個參數的小類而不是一個選項? 像 類CreateAdminModel {字符串電子郵件;串NAMEF; ...}? – frkn

+0

CreateAdmin錯誤=真和電子郵件= admin1234%40mail.ru&NAMEL = ASF&NAMEM = ADF 我期待,即天冬氨酸MVC收集參數從網址到routeValues對象 –

回答

6

你不能傳遞一個對象來獲取,而是試圖通過這樣的單個值:

[HttpGet] 
public ActionResult CreateAdmin(int value1, string value2, string value3) 
{ 
    //some code 
    var obj = new MyObject {property1 = value1; propety2 = value2; property3 = value3}; 
    return View(); 
} 

然後,您可以從您的應用程序的任何地方像傳遞值:

http://someurl.com/CreateAdmin?valu1=1&value2="hello"&value3="world" 
0

你可以通過值到Http獲取方法如

Html.Action("ActionName","ControllerName",new {para1=value, para2 = value}); 

並且您可以在控制中定義您的操作r like

[HtttpGet] 
public ActionResult ActionName(Para1Type para1, Para2Type para2) 
{ 
} 
+1

您可以通過建立模型並傳遞模型對象來傳遞對象中的整個值。 – Rex

2

如前所述,您無法將整個對象傳遞給HTTPGET操作。不過,我喜歡做的時候,我不希望有數百個參數的動作,就是:

  • 創建一個類,將封裝了所有必需的參數
  • 傳遞一個字符串值,我HTTPGET行動
  • 將字符串參數轉換爲我的GET操作正在使用的實際對象。

因此,說你有這個類代表您的所有輸入字段:

public class AdminContract 
    { 
     public string email {get;set;} 
     public string nameF {get;set;} 
     public string nameL {get;set;} 
     public string nameM {get;set;} 
    } 

然後,您可以添加一個GET操作,將期望只有一個,字符串參數:

[HttpGet] 
public ActionResult GetAdmin(string jsonData) 
{ 
    //Convert your string parameter into your complext object 
    var model = JsonConvert.DeserializeObject<AdminContract>(jsonData); 

    //And now do whatever you want with the object 
    var mail = model.email; 
    var fullname = model.nameL + " " + model.nameF; 

    // .. etc. etc. 

    return Json(fullname, JsonRequestBehavior.AllowGet); 
} 

而且田田!只需通過字符串化和對象(在前端)然後轉換它(在後端),您仍然可以享受HTTPGET請求的好處,同時在請求中傳遞整個對象而不是使用數十個參數。