javascript - MVC Ajax.BeginForm JavaScript 参数

标签 javascript jquery ajax asp.net-mvc razor

我有一个 AJAX 表单,其中 url id 需要来自 JavaScript

@using(Ajax.BeginForm("Add","Comments", new { ArticleID = 3 }, new AjaxOptions { UpdateTargetId="Comments"}))

应替换其中的 ArticleID = 3,以便将 ArticleID 值设置为等于调用的 Javascript 函数的结果。类似的东西

JS:

function GetArticleID()
{
      return 3;
}

Razor :

@using(Ajax.BeginForm("Add","Comments", new { ArticleID = GetArticleID() }, new AjaxOptions { UpdateTargetId="Comments"}))

Controller :

public ActionResult Add(int ArticleID, Comment model)
{

}

如何使用 JavaScript 函数结果作为 BeginForm 参数?

最佳答案

@using(Ajax.BeginForm(") 将由服务器上的 razor 执行。当时它不了解客户端浏览器中的 javascript 方法。所以你不能混合使用那里有一个 JavaScript 函数。

我更喜欢编写干净的自定义代码来执行 ajax 表单提交(而不是使用 Ajax.BeginForm),因为它允许我以我想要的任何方式进行自定义。

保持您的表单为正常表单。

@using(Html.BeginForm("Add","Comments"))
{
   <input type="hidden" name="ArticleId" id="ArticleId" value=""/>
   <input name="CommentText" type="text" />
   <input type="submit" id="saveCmntBtn" />
}

现在监听提交按钮的click 事件。将 ArticleId 值分配给输入字段,获取表单的序列化版本并发布到服务器。您可以使用 jQuery serialize() 方法来获取表单的序列化版本。

$(function(){

  $("#saveCmntBtn").click(function(e){
     e.preventDefault();
     $("#ArticleId").val(GetArticleID());
     var f=$(this).closest("form");
     $.post(f.attr("action"),f.serialize(),function(res){
       $("#Comments").append(res);
     });
  });

});

关于javascript - MVC Ajax.BeginForm JavaScript 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38416135/

相关文章:

javascript - 响应差距问题

javascript - 表单提交时 &lt;iframe&gt; 背景发生变化

javascript - 如何确保在 POST 之前完成对表单 DOM 的更改?

javascript - jQuery 和 piroBox 不喜欢 &lt;!DOCTYPE html>

javascript - 将数据加载到 Web 应用程序中

javascript - 使用 Grails SubmitToRemote onFailure 选项不起作用

php - 将复选框值发布到 php 文件

php - Ajax删除功能不起作用

javascript - 根据条件选择 JSON 对象

javascript - 未捕获的类型错误 : Cannot read property 'children' of null