2012-12-13 30 views
0

這裏是我的看法是這樣的:如何在一個表中執行一個簡單的多重選擇ASP.NET MVC4

@model Affiliate 


<div class="box paint color_16"> 
<div class="title"> 
    <h4><i class="icon-tasks"></i><span>@Model.CompanyName's Commissions</span> </h4> 
</div> 
<div class="content top "> 
    <div class="subtitle"> 
     @Html.ActionLink("Void", "DeleteInvoice", new { commList = "??", affId = Model.Id }, new { @class = "btn" }) 
     @Html.ActionLink("Create Invoice", "CreateInvoice", new { commList = "??", affId = Model.Id }, new { @class = "btn" }) 
     @Html.ActionLink("Pay", "PayInvoice", new { commList = "??", affId = Model.Id }, new { @class = "btn" }) 
    </div> 

    <table class="table table-striped table-hover"> 
     <tr> 
      <h3>Commissions</h3> 
     </tr> 
     <tr> 
      <td></td> 
      <td>Amount</td> 
      <td>Status</td> 
      <td>Action</td> 
     </tr> 
     @foreach (var item in Model.Commissions) 
     { 
      <tr> 
       @if (item.Status == ViewBag.PaymentStatus || ViewBag.PaymentStatus == "All") 
       { 
        <td>@Html.CheckBox("commId", new { value = item.Id })</td> 
        <td>@Html.DisplayFor(x => item.PayoutAmount)</td> 
        <td>@Html.DisplayFor(x => item.Status)</td> 
       } 
      </tr> 
     } 
    </table> 
</div> 

我希望能夠做的是,當我打的ActionLink的在頂部,從表中檢查所有檢查的項目,並將該ID列表傳遞給控制器​​邏輯。我假設一個視圖模型可能是解決方案,這樣的事情:

public Affiliate affilite { get; set; } 
public List<int> selectedItems { get; set; } 
etc. 

但如何讓我選擇的項目到該VM selectedItems容器?

+3

爲什麼你提到視圖模型,仍然在視圖中使用ViewBag?這兩件事情是矛盾的,不應該一起使用。正確的做法當然是使用視圖模型並擺脫ViewBag。所以我將首先爲這個視圖定義一個真實的視圖模型。在這個網站上至少應該有十幾個類似的答案,我已經說明了視圖模型和編輯器模板的用法。 –

+0

這不是最終的代碼,如果你閱讀這個問題,那麼他就不會使用視圖模型。問題是我如何將viewmodel屬性綁定到用戶選擇的任何地方。有用的迴應是受歡迎的,嘲諷和居高臨下的模擬示例代碼中使用的方法屬於另一個論壇。 – ledgeJumper

+1

但是你的視圖模型在哪裏?我只能看到一些'Affiliate'域模型,你已經把它作爲一個屬性放在你稱之爲* view model *的東西中。但這不是視圖模型的工作原理。他們不應該引用您的域模型。應該定義視圖模型以反映您的視圖的要求。 –

回答

2

根據您的意見,您似乎並沒有在尋找最「正確」的答案,而只是一個快速和骯髒的「我該怎麼做」的答案。如果你只是想通過列表,你可以設置你這樣的控制器操作:

public ActionResult MyAction(int[] id) 
{ 
    ... 
} 

或者,你似乎表明它是強類型與包含列表的屬性視圖模型(我將縮短該屬性的名稱,你會看到爲什麼在第二)。

在javascript中,最容易做的事情是使用jQuery綁定超鏈接上的單擊事件,該事件獲取已檢查的項目列表並將其附加到查詢字符串中。

$("#myLink").click(function() 
{ 
    var url = "site.com/action?"; 
    var ids = $(".table").find("input:checked"); 

    ids.each(function() 
    { 
     url += "id=" + $(this).val() + "&" 
    }); 

    window.location = url; 
}); 

基本上,你要創建一個長查詢字符串的操作參數的名稱重複一遍又一遍,標識數組。它看起來是這樣的(id是在MyAction INT []號):

id=15&id=20&id=25&id=30&.... 

,然後一旦查詢字符串建成後,將用戶重定向到該網址。 MVC應該能夠將它綁定到一個數組,然後你就全部設置好了。

無論如何,這基本上是這個想法;我寫的語法和JavaScript可能會消失,所以不要複製我的代碼,並期望它能夠像現在這樣工作 - 我把它寫在了我的頭頂。如果你的動作被綁定到視圖模型,那麼你需要在查詢字符串中的參數設置爲模型的屬性的名稱:

selectedids=1&selectedids=2&selectedids=3... 

或者,如果數組是一個對象的屬性,是模型的屬性...

model.selectedids=1&model.selectedids=2&model.selectedids=3... 

你只需要玩弄它一些。

+0

快速和非常髒,謝謝! – ledgeJumper

0

在表單標籤內使用html檢查(您也可以使用助手)並將模型發佈到一個post操作。 MVC將自動序列化模型

+0

這不是一個表格,我正在尋找一個解決方案來將檢查項目列表傳遞給一個單獨的actionlink。所以在URL參數我猜 – ledgeJumper

+1

你可以序列化所有的檢查(或一個表格與檢查)在一個jQuery發佈每個動作 – Donald

相關問題