2010-07-20 18 views
5

Okay, dość proste pytanie. Myślę, że muszę wpaść w pewne znaki ucieczki, ale nie jestem do końca pewien, gdzie.Jak przekazać wartości modelu jako parametry funkcji javascript z wewnątrz pomocnika HTML mvc asp.net takie Html.Radio?

Oto funkcja javascript Ja próbuje zadzwonić:

function setData(associateValue, reviewDateValue) { 
    var associate = document.getElementById("Associate"); 
    var reviewDate = document.getElementById("ReviewDate"); 
    associate.value = associateValue; 
    reviewDate.value = reviewDateValue; 
} 

Oto ASP.NET MVC linia gdzie ja próbuje utworzyć przycisk radio z zdarzenie click, który wywołuje powyższą funkcję i przekazuje dane z modelu jako wartości parametrów javascript.

<%= Html.RadioButton("Selected", item.Selected, new { onClick="setData('<%=item.Associate%>','<%=item.ReviewDate%>')" })%> 

Powyższe powoduje kilka kompilacji problemów i nie działa. Wywołanie takie jak poniższe wywołuje javascript, ale nie pobiera danych z modelu.

<%= Html.RadioButton("Selected", item.Selected, new { onClick="setData('item.Associate','item.ReviewDate')" })%> 

<%= Html.RadioButton("Selected", item.Selected, new { onClick="setData('item.Associate','item.ReviewDate')" })%> 

Myśli?

ROZWIĄZANIE

 <% String functionCall = String.Format("setData('{0}','{1}')", Html.Encode(item.Associate), Html.Encode(item.ReviewDate)) ; %> 
     <%= Html.RadioButton("Selected", item.Selected, new { onClick=functionCall })%>     

Odpowiedz

10

Musisz poprawnie zbudować ciąg, który reprezentuje obsługi onclick evenet:

onClick = String.Format("setData('{0}', '{1}')", item.Association, item.ReviewData) 
+1

+1, po prostu dodaj kodowanie HTML, aby upewnić się, że możliwe cytaty w danych modelu są poprawnie usunięte. –

+0

Uwielbiam tę odpowiedź. Bardzo prosta. – jason

1

To powinno być tak:

<%: Html.RadioButton("Selected", item.Selected, new { onClick="setData('" + Html.Encode(item.Associate) + "','" + Html.Encode(item.ReviewDate) + "')" })%> 

A jeśli to MVC2 powinien wolisz używać: zamiast =, aby upewnić się, że HTML zakodowany.

+0

Zauważ, że '<%:' faktycznie nie robi żadnej różnicy tutaj, ponieważ Html.RadioButton zwraca IHtmlString który wygrał” t dotknąć '<%:'. Jednakże, jest to dobra rada, aby uzyskać zwyczaj używania '<%:' domyślnie, używając tylko '<% =' kiedy wiesz, że go potrzebujesz. – stevemegson

Powiązane problemy