Quiero actualizar el modelo de valor en JavaScript de la siguiente, pero no es trabajo.

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

de vistas Razor como se muestra a continuación

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

¿Alguien puede decirme cómo asignar modelo de valor en JavaScript?

InformationsquelleAutor michaeld | 2013-04-23

3 Comentarios

  1. 48

    Esto debería funcionar

    function updatePostID(val)
    {
        document.getElementById('PostID').value = val;
    
        //and probably call document.forms[0].submit();
    }

    A continuación, tener un campo oculto u otro control para la PostID

    @Html.Hidden("PostID", Model.addcomment.PostID)
    //OR
    @Html.HiddenFor(model => model.addcomment.PostID)
    • si yo uso oculto de extensión html en el bucle foreach el html generado es <input id=»addcomment_PostID» name=»addcomment.PostID» type=»hidden» value=»» /> foreach post documento.getElementById(‘addcomment_PostID’).value = val; ,por lo que addcomment_PostID se actualizarán es el punto y no de trabajo. itried ponerlo fuera del foreach y funcionó . gracias.
    • No está claro a partir de su pregunta cómo desea acceder a la PostID. Si varios se generan, todavía depende de cómo desea manejar – como matriz de controles o como individuo. Si es esto último, entonces usted necesitará utilizar Html.Hidden("PostID_"[email protected]). Usted puede pasar esto a la función de JavaScript. Pero puedo decir que estoy totalmente de entender lo que usted está tratando de hacer. Que no se enciende en su modelo como el id/nombre ahora no se conoce de antemano
    • estoy consiguiendo el valor actualizado en el modelo
    • Me ayudó a mí. Gracias por compartir.
    • Yo estaba buscando este código. gracias
  2. 14

    El modelo (@Model) sólo existe mientras la página está siendo construido. Una vez que se procesa la página en el navegador, todo lo que existe es HTML, JavaScript y CSS.

    Lo que se quiere hacer es poner el PostID en un campo oculto. Como el PostID valor es fijo, de hecho no hay necesidad de JavaScript. Un simple @HtmlHiddenFor será suficiente.

    Sin embargo, usted desea cambiar su bucle foreach para un bucle for. La solución final se verá algo como esto:

    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>
        }
    }
    • Hola Jason, he modificado con la adición de más, aquí tenemos un bucle foreach para onclick del botón debe capturar el id del post para el modelo de valor en javascript. Creo que para este caso oculta html no funciona. También estoy pasando modelo de método de acción para «commentPostID» la propiedad no se puede acceder en lugar quiero actualizar el Modelo.addcomment.PostID con el id del post de valor.
    • Va a trabajar, basta con hacer una: <button type="submit" onclick="updatePostID('@Model.Post[i].PostID');">Add Comment </button>
  3. 1

    Usted podría utilizar jQuery y una llamada Ajax para publicar la actualización de nuevo a su servidor con Javascript.

    Se vería algo como esto:

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

Dejar respuesta

Please enter your comment!
Please enter your name here