2011-01-17 9 views
0

私は学習しており、素晴らしい情報表示ページを作り、トランザクションのリストを表示しています。しかし、私は銀行口座のリストを持っているドロップダウンボックスを追加していません。これはデフォルトにAllです。ASP.Netドロップダウンの値を返すMVC

ユーザーがアカウントを選択して[送信]ボタンを押すと、ページはそのアカウントのトランザクションだけに移動します。

私は、ドロップダウンを作成して、それのためのフォームは、次のように:

<form id="form1" runat="server"> 
<h2> 
    Transactions:</h2> 
<p> 
    <% 
     using (Html.BeginForm()) 
     { 
    %> 
    Bank Account: 
    <% =Html.DropDownList("ddAccounts", Model.BankAccountItems)%> <input id="Submit1" type="submit" value="Select" />  
    <% 
     } 
    %> 
</p> 
</form> 

私のモデルは、この含まれていますので、

public class AccountTransactionDisplay 
{ 
    public AccountTransactionDisplay() 
    { 
     DisplayLines = new List<AccountTransactionDisplayLine>(); 
    } 

    public SelectList BankAccountItems { get; set; } 
    public List<AccountTransactionDisplayLine> DisplayLines {get; set; } 
    public string ClosingBalance { get; set; } 
} 

public class BankAccountDropdownItem 
{ 
    public string Text {get; set;} 
    public string Value {get; set;} 
} 

public class AccountTransactionDisplayLine 
{ 
    public string RowColouring { get; set; } 
    public string TransactionDate { get; set;} 
    public string PayeeName { get; set; } 
    public string Amount { get; set; } 
    public bool AmountIsDebit { get; set; } 
    public string CategoryName { get; set; } 
    public string CostCenterName { get; set; } 
    public string BudgetName { get; set; } 
    public string RunningTotal { get; set; } 
    public bool RunningTotalIsDebit { get; set; } 
    public bool AlternateRowColour { get; set; } 
    public bool HasSplitItems { get; set; } 
} 

を、AccountTransactionDisplayは私がビューに渡すモデルであり、 。そのモデルでは、私はこれを持っています:

public SelectList BankAccountItems { get; set; } 

これは、ドロップダウンに表示される項目のリストを保持します。それは正しく表示されています。

ただし、ユーザーが[送信]ボタンをクリックすると、選択した値を戻す方法がわかりません。

私はPOSTを受け入れ、私のコントローラのメソッドを持っているだろうと思った...だから、私はこの追加しました:

 [HttpPost] 
    public ActionResult Transactions(AccountTransactionDisplay model) 
    { 
     AccountTransactionDisplay trans = GetTransactions(); 
     return View(trans); 
    } 

をそして、私はブレークポイントを設定した場合、それはこのに当たっているが、それモデルが空であるようです。フィルタリングを行うには、選択したアカウントのIDをGetTransactionsメソッドに追加する必要があります。

答えて

2

ページのレンダリング時に、ソースを表示します。 select要素のname属性(モデルに追加する必要があるプロパティの名前)が何であれ、モデルバインダーはその値をモデルにバインドします。フォームが送信されると、フォームフィールドの名前と値のペアのみが送信されます(ほとんどの場合)ので、select要素の名前はフォームデータとその選択値になります。オプションはすべてポストバックされませんMVCはSelectListプロパティを再バインドする方法がありません。

HTH

+0

ありがとうブライアン - 私はそれが私を助けると思う。私はソースをチェックし、ドロップダウンの名前は期待通りにddAccountsです。だから、私は既存のモデルにddAccounts(??)という名前のプロパティを追加する必要がありますが、どのような型にする必要がありますか? – Craig

+0

文字列が行います。 – CRice

+0

ありがとうございました!それはうまくいった。それは、値を提出するコントロールがあれば、Modelの同じ名前のプロパティに文字列として割り当てられます。 – Craig

関連する問題