2011-01-17 11 views
0

Ich lerne, und schaffte es, eine schöne Info-Display-Seite, die Liste der Transaktionen angezeigt. Ich habe jedoch keine DropDown-Box hinzugefügt, die eine Liste von Bankkonten enthält. Es ist standardmäßig für alle.ASP.Net MVC Rückgabewert eines DropDown

Wenn der Benutzer ein Konto auswählt und die Übermittlungsschaltfläche drückt, sollte die Seite nur mit Transaktionen für dieses Konto verknüpft werden.

Ich habe den Drop-Down erstellt und das Formular für die es, wie folgt aus:

<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> 

Mein Modell enthält diese:

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; } 
} 

So ist AccountTransactionDisplay das Modell, das ich zu der Ansicht passieren . In diesem Modell habe ich folgendes:

public SelectList BankAccountItems { get; set; } 

Das enthält eine Liste der Elemente, die in meinem Dropdown angezeigt werden. Das wird korrekt angezeigt.

Wenn der Benutzer jedoch auf die Schaltfläche Senden klickt, bin ich nicht sicher, wie der ausgewählte Wert zurückgeholt wird.

Ich dachte, dass ich eine Methode in meinem Controller haben würde, der die POST ... So akzeptiert, ich habe diese hinzugefügt:

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

Und wenn ich einen Haltepunkt setzen, ist es diese trifft, aber es scheint Modell ist leer. Ich muss die ID des ausgewählten Kontos der GetTransactions-Methode hinzufügen, um die Filterung durchzuführen.

Antwort

2

Wenn Ihre Seite gerendert wird, sehen Sie sich die Quelle an. Was auch immer das name-Attribut des select-Elements ist, das ist der Name einer Eigenschaft, die Sie Ihrem Modell hinzufügen müssen, dann bindet der Modellbinder diesen Wert an Ihr Modell. Wenn ein Formular abgeschickt wird, werden nur das Name/Wert-Paar der Formularfelder (größtenteils) übergeben, sodass der Name des Auswahlelements sowohl in den Formulardaten als auch in dem ausgewählten Wert enthalten ist. Alle Optionen werden nicht zurückgebucht , also hat MVC keine Möglichkeit, Ihre SelectList Eigenschaft erneut zu binden.

HTH

+0

Danke Brian - ich denke, das wird mir helfen. Ich überprüfe thbe Quelle, und der Name des Dropdown ist ddAccounts wie erwartet. Also, ich muss die Eigenschaft, namens ddAccounts (??) zu meinem bestehenden Modell hinzufügen - aber welcher Typ sollte es sein? – Craig

+0

Eine Zeichenfolge reicht. – CRice

+0

Danke Jungs! Das hat funktioniert. Keine Ahnung, wie ... Ist das eine Regel, dass, wenn es ein Steuerelement gibt, das einen Wert übergibt, wird es derselben benannten Eigenschaft des Modells als String zugewiesen? – Craig

Verwandte Themen