2009-12-09 15 views
6

Ho una vista mvc composta da una matrice di pulsanti di opzione. Ogni riga di pulsanti di opzione si trova in un gruppo e rappresenta un oggetto digitato dal modello. Usando la guida di vari blog e post ho vincolato con successo i risultati del modulo postato all'array del modello digitato nell'azione del controller, tuttavia non riesco a invertire l'effetto e associare un modello esistente ai pulsanti di opzione mantenendo il loro stato selezionato o non selezionato .ASP.NET MVC Collegamento bidirezionale dei dati del modello all'elenco dei pulsanti radio utilizzando il modello digitato

Il mio modello contiene una proprietà denominata "AnswerValue" che è compresa tra 0 e 4 e deve corrispondere ai nomi dei pulsanti radio. Ho provato a cambiare il valore dell'indice sul valore del modello "AnswerId", ma in tal modo il legame che stava funzionando non funziona più (credo che l'indice deve essere a base zero). Ecco alcune risorse che ho utilizzato fino ad ora questo Post e un Article by Scott Hanselman per arrivare dove sono ora.

Se qualcuno ha qualche idea su come eseguire questa associazione a due vie, sarebbe molto apprezzata.

Grazie

mio regolatore:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Save([Bind(Prefix = "SurveyAnswer")] SurveyAnswer[] responses, int SurveyID) 
    { 

mio punto di vista:

<% 
    int questionIndex = 0; 
    foreach (SurveyAnswer q in Model) 
    { 

%> 
    <%=Html.Hidden("SurveyAnswer.Index", questionIndex)%> 
    <%=Html.Hidden("SurveyAnswer["+questionIndex+"].AnswerId", q.AnswerId) %> 
    <tr> 
    <td style='background-color: #aaaaaa;padding-left: 10px; padding-right: 10px;border-right: solid 1px #fffff;'><%= questionIndex+1 %></td> 
    <td style='text-align: right;'><%= q.Question.DisplayValue %></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "0", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue"})%></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "1", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "2", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "3", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue"})%></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "4", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td> 
    </tr> 
<% 
    questionIndex++; 
    } 
%> 

risposta

6

il pulsante di opzione per sé non riconosce i valori (in termini di stato) diversi da Vero/Falso. Quindi sarà necessario confrontare il valore con la posizione effettiva e impostare esplicitamente lo stato VERO/FALSO.

Provare con questo sovraccarico del pulsante di scelta.

<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "0", q.AnswerValue == 0)%> 
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "1", q.AnswerValue == 1)%> 
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "2", q.AnswerValue == 2)%> 
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "3", q.AnswerValue == 3)%> 
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "4", q.AnswerValue == 4)%> 

Se si utilizza un ViewModel, forse è meglio mettere questa domanda logica (q.AnswerValue == 4) in là invece che direttamente nella vista.

PS: Penso che è possibile rimuovere l'ultimo parametro come il primo stabilisce già le atributes ID e il nome: "SurveyAnswer[" + questionIndex + "].AnswerValue"

+1

Se sto utilizzando Entity Framework e il set di entità generato di, che cosa sarebbe un buon metodo per estendere questo per mantenere la tua logica raccomandata. Grazie per l'aiuto finora. Sembra funzionare. – Jeremy

+0

Se non si utilizza un pattern ViewModel, è preferibile lasciarlo in questo modo, poiché ciò comporterà la modifica della logica del controller, il tipo di modello visualizzato alla vista e forse le procedure di convalida. Si usano principalmente quando si hanno modelli complessi (come 2 o più set di entità combinati in un unico modulo o per impostare SelectList/RadioButtons/..), se si desidera o controllare più di questo modello, dare un'occhiata a http: // geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx o la sezione "Uso di un Pattern ViewModel" di ScottGu nel suo Libro ASP.NET MVC 1.0. – JOBG

Problemi correlati