【问题标题】:How do I update a model value in JavaScript in a Razor view?如何在 Razor 视图中更新 JavaScript 中的模型值?
【发布时间】:2013-04-16 23:16:19
【问题描述】:

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

【问题讨论】:

    标签: javascript asp.net-mvc asp.net-mvc-3 razor


    【解决方案1】:

    这应该可以工作

    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)
    

    【讨论】:

    • 如果我在 foreach 循环中使用隐藏的 html 扩展,生成的 html 是 foreach post 文档.getElementById('addcomment_PostID').value = val; ,所以哪个 addcomment_PostID 将得到更新是点并且不起作用。尝试将其放在 foreach 之外并且它起作用了。谢谢。
    • 从您的问题中不清楚您希望如何访问 PostID。如果生成多个,它仍然取决于您要如何处理它们 - 作为控件数组或作为单个控件。如果是后者,那么您需要使用Html.Hidden("PostID_"+@post.PostID)。您可以将其传递给 JavaScript 函数。但我可以说我完全理解你想要做什么。它们不会出现在您的模型中,因为现在事先不知道 id/name
    • 它帮助了我。感谢分享。
    【解决方案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
    
         }
        });
    
    }
    

    【讨论】:

      【解决方案3】:

      模型 (@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>
          }
      }
      

      【讨论】:

      • 嗨,Jason,我已经修改并添加了更多代码,这里我们有 foreach 循环,因此单击按钮应捕获该帖子 ID 以在 javascript 中建模值。我认为对于这种情况 html hidden 将不起作用。此外,我将模型传递给操作方法,因此无法访问“commentPostID”属性,而我想用帖子 ID 值更新 Model.addcomment.PostID。
      • 它会起作用的,只要做一个:&lt;button type="submit" onclick="updatePostID('@Model.Post[i].PostID');"&gt;Add Comment &lt;/button&gt;
      猜你喜欢
      • 2021-07-23
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      • 2020-01-07
      • 2020-07-23
      • 2013-09-27
      • 2018-09-10
      • 1970-01-01
      相关资源
      最近更新 更多