2013-04-23 73 views
29

我想要更新JavaScript中的模型值,如下所示,但它不起作用。如何在Razor视图中更新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中分配模型的价值?

回答

34

这应该工作

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) 
+0

如果我使用隐藏的HTML扩展foreach循环生成的html是 foreach post.getElementById('addcomment_PostID')。value = val; ,所以addcomment_PostID将得到更新是点和不工作。 itried把它放在foreach之外,它工作。谢谢。 – michaeld 2013-04-23 17:50:22

+0

从你的问题中不清楚你想如何访问PostID。如果生成了多个,它仍然取决于你想如何处理它们 - 作为控件的数组或作为个体。如果是后者,那么你需要使用'Html.Hidden(“PostID _”+ @ post.PostID)''。您可以将其传递给JavaScript函数。但我可以说我完全理解你想要做的事情。他们不会出现在您的模型中,因为事先不知道ID /名称 – codingbiz 2013-04-23 17:58:59

+0

我在模型中获得价值更新 – michaeld 2013-04-23 18:32:11

10

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

你想要做的是将PostID放在隐藏字段中。由于PostID值是固定的,实际上不需要JavaScript。一个简单的@HtmlHiddenFor就足够了。但是,您需要更改foreach loop to a for loop。最终的解决方案将是这个样子:

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

杰森嗨,我有增加更多的代码修改,我们在这里有foreach循环这样的onclick按钮应该捕捉帖子的ID在JavaScript中借鉴价值。我认为这种情况下HTML隐藏不起作用。此外,我正在传递模型到动作方法,所以“commentPostID”属性不能被访问,而是我想更新Model.addcomment.PostID与职位ID值。 – michaeld 2013-04-23 16:36:46

+0

它会工作,只是做一个:'' – 2013-04-23 17:20:49

2

你可以使用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 

    } 
    }); 

} 
相关问题