Soru Jilet görünümünde JavaScript'deki model değerini nasıl güncellerim?


Aşağıdaki gibi JavaScript'deki model değerini güncellemek istiyorum ancak çalışmıyor.

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

aşağıda gösterildiği gibi Razor görünümünde

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

JavaScript'de model değerini nasıl atacağımı herkes söyleyebilir mi?


32
2018-04-23 16:24


Menşei




Cevaplar:


Bu çalışmalı

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

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

Sonra gizli bir alan ya da PostID

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

39
2018-04-23 16:51



foreach döngüsünde gizli html uzantısını kullanırsam, oluşturulan html <input id = "addcomment_PostID" name = "addcomment.PostID" type = "hidden" value = "" /> foreach post document.getElementById ('addcomment_PostID') 'dir. değer = 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
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 kullanmanız gerekecektir Html.Hidden("PostID_"+@post.PostID). Bunu JavaScript işlevine iletebilirsiniz. Ama ne yapmaya çalıştığını tam olarak anladığımı söyleyebilirim. Artık id / isim önceden bilinmediği için modelinize çıkmayacaklar. - codingbiz
modelde güncellenmiş değer alıyorum - michaeld
Bana yardımcı oldu. Paylaşım için teşekkürler. - Tops
Bu kodu arıyordum. Teşekkürler - Khoshtarkib


Model (@Model) sayfa oluşturulduğunda sadece var. 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 @HtmlHiddenFor yeterli olacaktır.

Ancak, foreach döngü için bir döngü. Son çözüm böyle bir şeye benzeyecek:

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

11
2018-04-23 16:25



Merhaba Jason, daha fazla kod ekleyerek değiştirdim, burada foreach döngüsüne sahibiz, bu yüzden bu butona basarak javascript'te model değerine sahip olmanız gerekir. 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
Çalışacak, sadece yap: <button type="submit" onclick="updatePostID('@Model.Post[i].PostID');">Add Comment </button> - von v.


Kullanabilirsin jQuery ve Ajax çağrısı Javascript ile belirli güncellemeyi sunucunuza geri gönderebilirsiniz.

Böyle bir şeye benziyordu:

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

     }
    });

}

2
2018-04-23 17:01