2014-05-07 51 views
1

我需要將列表(至少包含3個項目)傳遞給MVC HttpGet Action ...但我不知道如何傳遞...有沒有其他而不是使用請求查詢字符串?使用請求查詢字符串是關閉的圖表對我來說,因爲在客戶端動態創建的列表..替代方法將列表傳遞給MVC中的HttpGet方法

public ActionResult Customer(List customer) 
    { 

     return View(); 
    } 

請指導我通過這個...在此先感謝..

+0

它需要從用戶發送什麼樣的數據的傳遞?完整的客戶數據(名字,姓氏等)?或只是一個現有的客戶ID列表? – arserbin3

+0

@ arserbin3我需要通過身份證,姓名,出生日期,地址,城市,國家,電子郵件和其他基本的詳細信息列表.. – Bhuvi

回答

1

你可以這樣做通過手動解析FormCollection對象,但它會造成繁瑣的代碼。但是,如果您無法控制POST值的名稱,則這可能是必需的。

public ActionResult Customer(FormCollection response) 
{ 
    for (int i = 0; i < response["CustomerCount"]; i++ 
    { 
     list.Add(
      new Customer 
      { 
       ID = response["Customer" + i + ".ID"], 
       Name = response["Customer" + i + ".Name"], 
       ... 
      }); 
    } 
} 

但更清潔的方法是使用MVC的自動綁定,這對名單以及作品:

從用戶的查詢字符串:

/Customer/Add?myList[0].ID=2&myList[0].Name=Bob&myList[1].ID=18&myList[1].Name=Alice 

控制器:

public CustomerController : Controller 
{ 
    public ActionResult Add(List<Customer> myList) 
    { 
     var test = myList.Count; // 2 
     var test2 = myList[1].Name; // Alice 
    } 
} 

如果可能,在剃刀視圖中使用HtmlHelper方法來創建這些輸入,將所有這是猜測。一個例子編輯現有客戶:

@model MyNamespace.ViewModels.CustomerEditViewModel 
@Html.BeginForm("Edit", "Customer") 
{ 
    @* Show all current customers for editing *@ 
    @for (int i=0; i < Model.Customers.Count; i++) 
    { 
     @Html.TextBoxFor(x => x.Customers[i].ID) 
     @Html.TextBoxFor(x => x.Customers[i].Name) 
    } 

    <input type="submit" /> 
} 

注:客戶是在CustomerEditViewModelList<Customer>return View(myViewModel);

+0

非常感謝你@ arserbin3 ..我用你的想法,它運作良好..沒有單詞表達我的感激之情..再一次感謝你,我的朋友...... :-) – Bhuvi

+0

我對你提到的方法有另一種懷疑。 Querystring有長度限制....所以還有其他方法嗎? – Bhuvi

+0

另一種(也是更好的)方法是將數據作爲「POST」請求而不是「GET」來提交。 POST數據沒有長度限制。然後你應該考慮在'Add()'動作中加入'[HttpPost]'屬性 – arserbin3