2013-04-23 6 views
29

Chcę zaktualizować wartość modelu w JavaScript jak poniżej, ale nie działa.Jak zaktualizować wartość modelu w JavaScript w widoku maszynki Razor?

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

zdaniem Razor jak pokazano poniżej

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

Czy ktoś może mi powiedzieć, jak przypisać wartość modelu w JavaScript?

Odpowiedz

34

To powinno działać

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

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

Następnie mają ukryte pole lub inną kontrolę dla PostID

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

jeśli używam ukrytego rozszerzenia html w pętla foreach wygenerowany przez html to michaeld

+0

Z twojego pytania nie wynika jasno, w jaki sposób chcesz uzyskać dostęp do PostID. Jeśli generowane jest wiele, to zależy to od tego, jak chcesz je obsłużyć - jako zestaw elementów sterujących lub jako osobny. Jeśli to drugie, musisz użyć 'Html.Hidden (" PostID _ "+ @ post.PostID)'. Możesz przekazać to do funkcji JavaScript. Ale mogę powiedzieć, że w pełni rozumiem, co próbujesz zrobić. Nie pojawią się w twoim modelu, ponieważ id/nazwa nie są znane wcześniej – codingbiz

+0

Otrzymuję nową wartość w modelu – michaeld

10

Model (@Model) istnieje tylko podczas tworzenia strony. Po wyświetleniu strony w przeglądarce wszystko, co istnieje, to HTML, JavaScript i CSS.

Co chcesz zrobić, to PostID w ukrytym polu. Ponieważ wartość PostID jest ustalona, ​​nie ma potrzeby używania JavaScriptu. Wystarczy prosty @HtmlHiddenFor.

Należy jednak zmienić swoje foreach loop to a for loop. Ostateczne rozwiązanie będzie wyglądać mniej więcej tak:

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, mam modyfikowany dodając więcej kodu, tutaj mamy pętla foreach tak onclick przycisku należy uchwycić to stanowisko id do modelu wartości w javascript. Myślę, że dla tego przypadku ukryty HTML nie zadziała. Ponadto przekazuję metodę model do działania, więc nie można uzyskać dostępu do właściwości "commentPostID", zamiast tego chcę zaktualizować model.addcomment.PostID wartością post id. – michaeld

+0

To zadziała, po prostu wykonaj: '' –

2

można użyć jQuery i wywołanie Ajax, aby opublikować określoną aktualizację z powrotem na serwerze za pomocą Javascript.

To mogłoby wyglądać tak:

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 

    } 
    }); 

} 
Powiązane problemy