2013-04-23 20 views
29

Voglio aggiornare il valore del modello in JavaScript come di seguito, ma non funziona.Come aggiornare un valore del modello in JavaScript in una vista Razor?

function updatePostID(val) 
{ 
    @Model.addcomment.PostID = val; 
} 

in vista del rasoio come illustrato di seguito

foreach(var post in Model.Post) 
{ 
    <br/> 
    <b>Posted by :</b> @post.Username <br/> 
    <span>@post.Content</span> <br/> 
    if(Model.loginuser == Model.username) 
    { 
     @Html.TextAreaFor(model => model.addcomment.Content) 
     <button type="submit" onclick="updatePostID('@post.PostID');">Add Comment </button> 
    } 
} 

Qualcuno può dirmi come assegnare il valore del modello in JavaScript?

risposta

34

Questo dovrebbe funzionare

function updatePostID(val) 
{ 
    document.getElementById('PostID').value = val; 

    //and probably call document.forms[0].submit(); 
} 

Poi hanno un campo nascosto o un altro controllo per la PostID

@Html.Hidden("PostID", Model.addcomment.PostID) 
//OR 
@Html.HiddenFor(model => model.addcomment.PostID) 
+0

se uso l'estensione html nascosta nel foreach loop html generato è foreach post document.getElementById ('addcomment_PostID'). value = val; , quindi quale addcomment_PostID verrà aggiornato è point e non funzionante. lo ha messo fuori dal foreach e ha funzionato. Grazie. – michaeld

+0

Dalla tua domanda non è chiaro come si desidera accedere al PostID. Se vengono generati più, dipende comunque da come li si vuole gestire, come una serie di controlli o come singoli. In quest'ultimo caso, dovrai utilizzare 'Html.Hidden (" PostID _ "+ @ post.PostID)'. È possibile passare questo alla funzione JavaScript. Ma posso dire che capisco perfettamente cosa stai cercando di fare. Non si presenteranno nel tuo modello poiché l'id/nome non sono noti in anticipo – codingbiz

+0

mi sto aggiornando sul valore nel modello – michaeld

10

Il modello (@Model) esiste solo mentre la pagina è in costruzione. Una volta che la pagina viene visualizzata nel browser, tutto ciò che esiste è HTML, JavaScript e CSS.

Quello che vorrete fare è mettere il PostID in un campo nascosto. Poiché il valore PostID è corretto, in realtà non è necessario JavaScript. Un semplice @HtmlHiddenFor sarà sufficiente.

Tuttavia, è necessario modificare il numero foreach loop to a for loop. La soluzione finale sarà simile a questo:

for (int i = 0 ; i < Model.Post; i++) 
{ 
    <br/> 
    <b>Posted by :</b> @Model.Post[i].Username <br/> 
    <span>@Model.Post[i].Content</span> <br/> 
    if(Model.loginuser == Model.username) 
    { 
     @Html.HiddenFor(model => model.Post[i].PostID) 
     @Html.TextAreaFor(model => model.addcomment.Content) 
     <button type="submit">Add Comment</button> 
    } 
} 
+0

Hi Jason, ho modificato con l'aggiunta di più codice, qui abbiamo ciclo foreach in modo onclick del pulsante deve catturare quella id post per modellare il valore in javascript. Penso che per questo caso html nascosto non funzioni. Inoltre sto passando il modello al metodo di azione, quindi non è possibile accedere alla proprietà "commentPostID". Desidero aggiornare Model.addcomment.PostID con il valore dell'ID post. – michaeld

+0

Funzionerà, basta fare: '

2

Si potrebbe utilizzare jQuery e una chiamata Ajax per inviare l'aggiornamento specifico al tuo server con Javascript.

Sarebbe simile a questa:

function updatePostID(val, comment) 
{ 

    var args = {}; 
    args.PostID = val; 
    args.Comment = comment; 

    $.ajax({ 
    type: "POST", 
    url: controllerActionMethodUrlHere, 
    contentType: "application/json; charset=utf-8", 
    data: args, 
    dataType: "json", 
    success: function(msg) 
    { 
     // Something afterwards here 

    } 
    }); 

} 
Problemi correlati