2009-01-12 116 views
3

在ASP.NET MVC應用程序中,我正在讓Admin接受或拒絕新成員的邏輯。我展示的成員列表和兩個按鈕接受和拒絕,像這樣:將視圖中的數據傳遞給控制器​​

<% foreach (var mm in (ViewData["pendingmembers"] as List<MyMember>)) %> 
<% { %> 
    <tr><td>Username:<%=mm.UserName %></td><td> 
    <tr><td>Firstname:<%=mm.FirstName %></td><td> 
    ...etc... 
    <tr> 
     <td> 
     <% using (Html.BeginForm("AcceptPendingUser", "Admin")) 
     { %> 
      <input type="submit" value="Accept" /> 
     <% } %> 
     </td> 
     <td> 
     <% using (Html.BeginForm("RejectPendingUser", "Admin")) 
     { %> 
     <input type="submit" value="Reject" /> 
     <% } %> 
     </td> 
    </tr> 
<% } %> 

因此,會員數據待定名單是MyMember對象的列表。每個MyMember對象都將被打印出成員,並且爲管理員設置兩個按鈕來接受或拒絕未決成員。

然後,在控制器我分離這兩個輸入欄/表格的處理,這樣的:

public ActionResult AcceptPendingUser() 
{ 
    // TODO: Add code to save user into DB and send welcome email. 
    return RedirectToAction("Index"); 
} 

public ActionResult RejectPendingUser() 
{ 
    // TODO: Add code to remove user from PendingUsers list and send rejection email. 
    return RedirectToAction("Index"); 
} 

我想直接讓旁邊的按鈕,用戶按下對象。 如何將MyMember對象從視圖發送到控制器? 或者我怎麼發送一個數字索引與按鈕按?也許有一個隱藏的領域?

回答

3

最簡單的選擇很可能是一個隱藏的輸入:

<input type="hidden" value="<%=mm.Key%>" name="key" id="key" /> 

(名稱相應,在每個表格)

兩個控制器接着會採取所謂的「關鍵」的論點(重命名,以適應) 。如果你想分析來自多個輸入的對象,你需要一個ModelBinder。當然,您可以考慮使用基於查詢字符串的url,或者使用類似jQuery(或其他腳本助手)的方式提交數據而不需要表單(如果腳本可用),而不是2 * n表單。

+0

好的。我會嘗試,但我無法控制在受控方傳遞的項目?論證應該是什麼類型?我試圖在這一點上只通過字符串.... – Pompair 2009-01-12 13:45:31

+0

那麼,字符串,然後。 – 2009-01-12 15:04:16

3

而不是使用HTML按鈕考慮使用ActionLink並構造它以包含被批准的成員的ID。另一種方法是設置一個複選框(其值是被批准的成員的ID),管理員可以爲每個成員批准選擇一個複選框,其中一個用於拒絕,另一個用於批准/拒絕整個表單。

3

回答對自己和其他MVC新手:

我得到了它終於與此代碼的工作:

VIEW:

<%=Html.ActionLink(
    "Jump", 
    "Jump", 
    new { name=(ViewData["Person"] as Person).Name, 
    person=ViewData["Person"]}, 
    null) %> 

控制器:

public ActionResult Index() 
{ 
    ViewData["Title"] = "Home Page"; 
    ViewData["Message"] = "Welcome to ASP.NET MVC!"; 
    Person p = new Person(); 
    p.Name = "Barrack"; 
    p.Age = 35; 
    ViewData["Person"] = p; 
    return View(); 
} 

public ActionResult Jump(string name, Person person) 
{ 
    return View(); 
} 

調試應用程序在跳轉方法給了我很好的「Barrack」字符串的名稱參數,但人蔘數在null中。

我也明白什麼樣批評家試圖解釋:可以很容易地發送簡單的數據類型,如字符串和整數到控制器,但複雜的類型,比如我的Person對象需要別的東西。

基本上傳遞一個int對我來說就足夠了。這裏最難的部分是找出建立ActionLink的正確方法。

乾杯, Pom

相關問題