2013-04-23 21 views
29

Model değerini JavaScript’te aşağıdaki gibi güncellemek istiyorum ancak çalışmıyor.Jilet görünümünde JavaScript'deki model değerini nasıl güncellerim?

Jilet görünümünde
function updatePostID(val) 
{ 
    @Model.addcomment.PostID = val; 
} 

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

herkes nasıl JavaScript modeli değer atamak söyleyebilir

aşağıda gösterildiği gibi?

cevap

34

Bu Sonra Şunları kullanabilirsiniz PostID

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

Gizli html uzantısını foreach döngüsü oluşturulan html foreach post document.getElementById ('addcomment_PostID'). value = val; , hangi addcomment_PostID güncellenen alacak nokta ve çalışmıyor. foreach dışında koyarak itti ve işe yaradı. Teşekkürler. – michaeld

+0

Sorunuzdan PostID'ye nasıl erişmek istediğiniz açık değil. Birden fazla üretilirse, yine de bunları nasıl kontrol etmek istediğinize bağlıdır - kontrol dizisi veya bireysel olarak. İkincisi ise, o zaman Html.Hidden ("PostID _" + @ post.PostID) 'yi kullanmanız gerekecektir. Bunu JavaScript işlevine iletebilirsiniz. Ama ne yapmaya çalıştığını tam olarak anladığımı söyleyebilirim. Şu anda id/isim bilinmediği için modelinize dönmeyecekler – codingbiz

+0

Model – michaeld

10

Model (@Model) yalnızca sayfa oluşturulurken mevcuttur. Sayfa tarayıcıda oluşturulduğunda, var olan her şey HTML, JavaScript ve CSS'dir.

Yapmak istediğiniz şey PostID'yi gizli bir alana yerleştirmektir. PostID değeri sabitlendiğinden, aslında JavaScript'e gerek yoktur. Basit bir @HtmlHiddenFor yeterli olacaktır. Ancak, foreach loop to a for loop ürününü değiştirmek isteyeceksiniz. Nihai çözüm bu gibi bir şey olacaktır:

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

Merhaba Jason, ben daha kod ekleme ile değiştirdiniz, işte foreach döngüsü böylece onclick düğmeye javascript değerini modellemek için post Kimliği yakalamak gerektiğini vardır. Sanırım bu dava için html işe yaramayacak. Ayrıca modele action yöntemini iletiyorum, bu yüzden "commentPostID" özelliğine erişilemiyor, bunun yerine Model.addcomment.PostID değerini post kimlik değeriyle güncellemek istiyorum. – michaeld

+0

Çalışacak, sadece yapmalısınız: '' –

2

için gizli bir alan veya diğer kontrole sahip

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

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

çalışması gerekir jQuery ve Belirli güncellemeyi sunucunuza Javascript ile göndermek için bir Ajax çağrısı.

Böyle görünecektir:

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 

    } 
    }); 

} 
İlgili konular