2010-06-17 23 views
5

W mojej witrynie ASP.NET MVC, część funkcji pozwala użytkownikowi na wpisanie godzin, kiedy pewne miejsce jest otwarte.Model ASP.NET MVC wiążący się z listą

Postanowiłem przechowywać te godziny w tabeli VenueHours w mojej bazie danych, z relacją FK-PK do tabeli Venues, a także parametrami DayOfWeek, OpeningTime i ClosingTime.

W moim widoku chcę zezwolić użytkownikowi na wprowadzanie tylko tych godzin, o których wiedzą; innymi słowy, niektóre dni mogą nie zostać wypełnione dla Miejsca. Zastanawiam się nad utworzeniem pól wyboru, które użytkownik może sprawdzić, aby włączyć pola OpenTime i ClosingTime dla DayOfWeek, do których należy pole wyboru.


Moje pytanie dotyczy jak przekazać tę informację do mojego HttpPost kontrolera akcji.

Ponieważ znam maksymalną liczbę dni, które można przekazać (7), mógłbym oczywiście zapisać 7 moich neutralnych parametrów VenueHour w mojej Akcji, ale jestem pewien, że jest lepszy sposób.

Czy mogę w jakiś sposób powiązać informacje o widoku z listą przekazaną do mojej akcji? Pomoże to również, gdy napotkasz scenariusz, w którym nie ma ograniczenia co do ilości informacji, które użytkownik może wypełnić.

Odpowiedz

13

Scott Hanselman opublikował very good article o tym, jak domyślny segregator modelowy zajmuje się kolekcjami, tablicami i słownikami. To wspaniałe, jeśli nie chcesz pisać niestandardowego spoiwa do modelu, chociaż pisanie niestandardowego spoiwa do modelu nie jest tak wielką sprawą.

+0

Świetnie! Spróbuję tego użyć. –

+0

Czy możliwe jest użycie atrybutu [Bind (Exclude = "...")], aby nie wiązać niektórych parametrów wewnątrz każdego obiektu na liście? –

1

Spróbuj wykonać następujące czynności

1 - Umieścić wszystkie pola wejściowe (które mogą być zaludnione przez DatePicker kontroli JQuery) wewnątrz div w widoku aspx.

2 - użycie selektorów Jquery do przechwycenia wszystkich wartości (wewnątrz podanego powyżej DIV), które muszą zostać zaksięgowane w metodzie Action, do tablicy JavaScript po stronie klienta.

zapoznaj Filtering input elements inside DIV

var enteredVenueHours = new Array(); 
for(var i=0;i < inputsInsideDiv.length;i++) 
{ 
    // add the elements to the JS array 
} 

3 - Użyj słupek jQuery wysyłać enteredVenueHours powrotem do działania kontrolera **

$.post('<%=Url.Action("ActionMethod")%>',{ EnteredVenueHours: enteredVenueHours,function (data) 
{ 
    // Udpate status to be displayed here. 
}); 

4 - Upewnij się, że metoda działania kontrolera ma następujący podpis

[AcceptVerbs(HTTP.Post)] 
public ActionResult ActionMethod(List<string> EnteredVenueHours) 
{ 
    // Have the DB persistance logic . 
} 
Powiązane problemy