当前位置: 首页 > 面试题库 >

使用Ajax将表单数据发布到Controller的操作

司寇研
2023-03-14
问题内容

我在MVC3中有一个页面,带有链接(Ajax.ActionLink)。当用户单击它时,它将调用控制器的动作,并将结果插入到div中,并带有replace。

代码如下所示:

@Ajax.ImageActionLink("/Images/btn_share.png", "Share pool", "SharePool", new { poolKey = Model.Id, poolName = Model.Name },
    new AjaxOptions { 
        UpdateTargetId="popup", 
        HttpMethod="GET", 
        InsertionMode = InsertionMode.Replace,
        LoadingElementId="loading_dialog",
        OnSuccess = "ShowPopup('#popup_share', true, true)"
    }

ImageLinkAction是使用图像作为链接的自定义扩展方法,而ShowPopup是显示更新后的div(使其显示为弹出窗口)的javascript函数。

现在,插入到创建弹出窗口的div中的标记代码包含如下形式

<div>
@using (Html.BeginForm()) {

    @Html.HiddenFor(model => model.ID)

    <div class="editor-label">
        @Html.LabelFor(model => model.EmailAddress)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.EmailAddress)
        @Html.ValidationMessageFor(model => model.EmailAddress)
    </div>

    // ... other fields

    @Html.ValidationSummary(true)
    <p>
        <button type ="submit">Share</button>       
    </p>
}
</div>

问题出在表单的提交:“提交”按钮调用适当的操作,但带有回发,这会导致页面刷新。我需要用ajax发布数据,接收响应,这是另一个插入到

我试图用下面的Ajax.ActionLink替换Submit按钮

    @Ajax.ActionLink("Share", "Share",
        new Models.MyModel 
            {
                ID = Model.ID,
                EmailAddress = Model.EmailAddress
            },
        new AjaxOptions
            {
                UpdateTargetId="popup", 
                HttpMethod="POST", 
                InsertionMode = InsertionMode.Replace,
                LoadingElementId="loading_dialog",
                OnSuccess = "ShowPopup('#popup_share', true, true)"
            }

控制器的代码如下所示:

[HttpPost]
public ActionResult SharePool(MyModel model)
{
    // ...
    return PartialView("_MyPartialView", model)
}

问题是,在呈现Ajax ActionLink时(加载表单时),Model.EmailAddress中没有值,因此控制器中的POST操作仅接收ID参数。

我该如何处理?理想情况下,我认为我应该添加

OnBegin = "PreparePostData()"

但是由于我只基本了解javascript,所以我不知道如何实现此功能。我认为此PreparePostData()应该收集表单字段并准备在调用ajax调用之前设置的对象routeValueshtml" target="_blank">参数。

任何人都可以给我一些有关如何执行此操作的指示?

还是在这个问题上有其他更好的方法?

谢谢


问题答案:

我建议仅使用jQuery编写自己的AJAX调用。无论如何,它比MVC的助手更灵活

@Html.ActionLink("Share", "Share", new { }, new { id = "share" })

然后一个功能

$("#share").click(function (e) {
   e.preventDefault();
   //Show loading display here
   var form= $("#shareForm");
   $.ajax({
       url : '@Url.Action("Share")',
       data: form.serialize(),
       type: 'POST',
       success: function(data){
          //Show popup
          $("#popup").html(data);
       }
   });
});


 类似资料:
  • 问题内容: 我的应用程序中的一个页面具有一组链接,这些链接在单击时会基于TableTools jQuery插件发布表单数据。我想在一个新窗口中打开这个新页面。关于最佳方法的任何想法?我宁愿不将所有操作链接都更改为单个表单和用法。我尝试过调用一个新窗口以成功打开,然后将数据写入此页面,但这没有用。请帮忙! HTML: Javascript: 问题答案: 找到了答案: jQuery.ajax成功回调函

  • 问题内容: 我希望以下表格使用AJAX。因此,在单击命令按钮后无需重新加载页面即可显示注释。使用Java Server Faces 2.0需要更改什么? 功能:此表单提供了一个inputText来定义主题。按下命令按钮后,将搜索有关此主题的注释。注释显示在dataTable中(如果有)。否则显示为 空 。 问题答案: 您需要告诉命令按钮改用Ajax。这就像在其中嵌套标签一样简单。您需要指示它通过提

  • 问题内容: 我有以下代码,但是当我从页面重定向提交时。我希望能够使用jquery / ajax向其发布内容,以便提交时页面不会刷新。有人可以给我看一个jsfiddle演示吗? 问题答案: 看一下jQuery :

  • 问题内容: 我想以ajax的形式发送所有输入。我有这样的形式。 在.js文件中,我们有以下代码: 但这不起作用。我不想使用Form数据。 问题答案: 只要我们要发送具有名称属性的所有表单输入字段,就可以对所有表单执行此操作,而与字段名称无关: 第一个解决方案 第二个解决方案 :在此解决方案中,您可以创建一个输入值数组:

  • 问题内容: 我正在创建一个小应用程序来自学ASP.NET MVC和JQuery,其中一个页面是其中可以选择一些项目的列表。然后,我想按下一个按钮,并使用JQuery的Post函数将包含选定项ID的列表(或等效项)发送到我的控制器。 我设法得到一个包含所选元素ID的数组,现在我要发布该数组。我可以这样做的一种方法是在页面中创建一个具有隐藏值的虚拟表单,然后使用所选项目设置隐藏值,然后发布该表单。但是

  • 问题内容: 如何将表单数据保存在文件或本地db(也许使用AJAX)中,该文件或数据通过表单操作将数据发送到外部db? 我的表单的源代码在这里:http : //jsbin.com/ojUjEKa/1/edit 我应该对代码进行哪些更改(如果有)? 对。因此,我能够使用AJAX将数据存储到localStorage中,并希望将存储的数据发送到名为backend.php的文件中。这是我的html文件: