47

我想在 JavaScript 中更新模型值,如下所示,但它不起作用。

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

在 Razor 视图中,如下所示

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 中分配模型值?

4

3 回答 3

62

这应该工作

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

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

然后有一个隐藏字段或其他控件PostID

@Html.Hidden("PostID", Model.addcomment.PostID)
//OR
@Html.HiddenFor(model => model.addcomment.PostID)
于 2013-04-23T16:51:35.770 回答
17

模型 ( @Model) 仅在构建页面时存在。一旦页面在浏览器中呈现,所有存在的就是 HTML、JavaScript 和 CSS。

您要做的是将 PostID 放在隐藏字段中。由于 PostID 值是固定的,因此实际上不需要 JavaScript。一个简单的@HtmlHiddenFor就足够了。

但是,您需要将foreach 循环更改为 for 循环。最终解决方案将如下所示:

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>
    }
}
于 2013-04-23T16:25:51.267 回答
1

您可以使用jQuery 和 Ajax 调用通过 Javascript 将特定更新发布回您的服务器。

它看起来像这样:

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

     }
    });

}
于 2013-04-23T17:01:11.143 回答