web-dev-qa-db-fra.com

Comment mettre à jour une valeur de modèle en JavaScript dans une vue Razor?

Je souhaite mettre à jour la valeur du modèle en JavaScript comme ci-dessous, mais cela ne fonctionne pas.

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

en vue rasoir comme indiqué ci-dessous

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

Quelqu'un peut-il me dire comment attribuer une valeur de modèle en JavaScript?

38
michaeld

Cela devrait marcher

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

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

Ensuite, avoir un champ caché ou un autre contrôle pour le PostID

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

Le modèle (@Model) n'existe que pendant la construction de la page. Une fois la page rendue dans le navigateur, il ne reste plus que HTML, JavaScript et CSS.

Ce que vous voudrez faire, c'est mettre le PostID dans un champ caché. Comme la valeur de PostID est fixe, JavaScript n’est pas nécessaire. Un simple @HtmlHiddenFor suffira.

Cependant, vous voudrez changer votre boucle foreach en boucle for . La solution finale ressemblera à ceci:

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>
    }
}
14
Jason Berkan

Vous pouvez utiliser jQuery et un appel Ajax pour publier la mise à jour spécifique sur votre serveur avec Javascript.

Cela ressemblerait à ceci:

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

     }
    });

}
1
Dan Esparza