问题标签 [ajax.beginform]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
510 浏览

javascript - Ajax.Begin 表单和重新加载 PartialView

我有一种情况,我使用 Ajax.BeginForm() 将一些数据(评论表单)发布到控制器方法。然后,此控制器方法使用实体框架将一些信息写入数据库(只要 ModelState 有效)。

作为表单的一部分,我使用 OnSucess 重载,在表单发布后执行 javascript 函数。这个函数,基本上调用了另一个控制器方法(它返回一个局部视图——在这种情况下是注释列表)。

我的问题是,新添加的注释不包含在控制器操作返回的视图中,尽管我知道它存在于数据库中。

这使我有两个可能的选择:

  1. htmlhelper 表单的 OnSucess() 函数在控制器方法实际返回之前执行。
  2. 实体框架正在处理数据。

在 2 的情况下,我不知道实体框架曾经缓存数据,除非被明确告知这样做。所以我假设它是1。

因此,为了进一步调查,我修改了 OnSucess 方法和控制器操作。

我的表单定义如下:

我的控制器动作被定义为(为清楚起见省略了细节):

最后,客户端方法定义为:

返回值为 0 时,调用函数 reloadBlogComments()。

但是以上的修改,证明了我上面提到的第一个假设(1)实际上是错误的。在控制器返回值之前无法执行成功函数。所以我完全不知道为什么新添加的评论没有与其他评论一起返回。

我的 reloadBlogComments() 函数定义如下:

即使使用延迟调用 reloadBlogComments() setTimeout(function () { reloadBlogComments(); }, 3000);也无法获得一致的值。

我在哪里错了?

0 投票
3 回答
7361 浏览

asp.net-mvc - Ajax.BeginForm 总是触发 OnSuccess 方法,即使数据不正确

我正在尝试将表单提交给控制器操作并根据 OnSuccess 或 OnFailure 处理响应。问题是,即使数据无效并且我未能通过 ModelState.IsValid 测试,也会调用 OnSuccess 方法。应该调用 OnFailure 方法。

我的观点:

我的控制器动作:

我的视图模型:

因此,如果我在 CategoryName 字段中输入超过 75 个字符的字符串,我可以看到该表单未通过 ModelState.IsValid 测试,并且视图被发回,并带有“类别名称必须小于 75 个字符”的注释。错误信息。但它不是触发 OnFailure 事件,而是触发 OnSuccess 事件。为什么?

提前致谢。

0 投票
0 回答
341 浏览

partial-views - 使用 Ajax.BeginForm 将数据发布到具有完整站点名称的控制器操作

我想将 jQuery 对话框中打开的部分视图中的数据发布到具有全名的控制器操作,如下所示:

而不是这个:

@using (Ajax.BeginForm(" SendMail ", " Ui ", (new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "email-dialog", OnSuccess = "onEmailSuccess" })))

我想在下面:

@using (Ajax.BeginForm(" http://www.MyWebsite.com/Ui/SendMail ", (new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "email-dialog", OnSuccess = "onEmailSuccess" })))

任何想法 ?

0 投票
1 回答
638 浏览

javascript - Ajax .BeginForm 在 IE9 中返回空白视图

MVC4 C#

我在整个应用程序中都使用 Ajax.BeginForm,它运行良好。当我创建并测试 ChkNum 视图时,它工作得很好。突然它停止工作了,我不知道为什么。它在其他视图中仍然有效,但在 ChkNum 视图中,当 post 操作中的 ModelState.IsValid 测试失败并返回视图时,返回的页面是空白的(我得到页眉和页脚但没有正文)。适当的脚本随站点一起加载并在所有其他视图中工作。

ChkNum 视图:

ChkNum 动作:

我已经检查了几次代码并将其与工作操作和视图进行了比较,并没有发现任何问题。我在返回的 PartialView 处设置了一个断点,它正确地通过了 CkNmFrm。

我想不出我在应用程序中更改的任何其他可能导致此问题的内容。

在我的智慧结束这一点。非常感谢任何帮助。

更新: 我使用的是 IE 9。我刚刚在 Chrome 中尝试过,问题就消失了。所以现在的问题是为什么它在除 ChkNum 之外的多个视图中都有效,而且问题是 IE 特有的?

0 投票
1 回答
2984 浏览

ajax - mvc ajax.beginform 不适用于局部视图

我一直在尝试让级联下拉菜单在 asp.net mvc4 中工作......现在我从 ajax.beginform 开始......稍后我可能会直接使用 jquery......

我的问题是第一个(轨道)ajax.beginform 被调用,它调用控制器,然后它指向第二个部分(轨道)......但是当 SelectRailPartial.cshtml 渲染时它会这样做一个完整的视图......它不是用 div 标记作为替换的渲染......我已经尝试了 ajaxControls 中的各种值来指定替换等......它们似乎没有任何区别......

我怀疑我的问题可能出在我所包含的 javascripts 中......我已经把它全部剥离了一些我知道我需要保持简单......有人能发现我做错了什么吗?请....

在我的(移动)控制器中,我有以下两种方法:

我的 LoadRailVehicle.cshtml

在 xSelectTrackPartial.cshtml 中:

在 xSelectRailPartial.cshtml 中

这是我通过 _viewstart 获得的 _layout.cshtml

0 投票
2 回答
407 浏览

ajax - 如何将每个元素的 ID 从 Ajax 表单发送到操作?

我需要那个,我点击哪个项目,把它Id付诸GetProduct()行动。我使用hidden了元素,但它不起作用:

我哪里错了?我该如何发送Id

0 投票
12 回答
38123 浏览

c# - MVC4 Ajax.BeginForm 不替换 UpdateTargetId

关于 Ajax.BeginForm 没有正确更新目标元素的问题有很多关于返回部分视图的问题:
mvc4 ajax 更新同一页面
ASP.NET MVC 4 - Ajax.BeginForm 和 html5
MVC 4 (razor) - Controller is返回一个局部视图但整个页面正在更新
MVC 4 Ajax 没有更新页面内的 PartialView
但是,所有这些都可以通过手动写出 jQuery ajax 或包含丢失的 javascript 文件来回答。

相关控制器代码:

在我的布局中,我引用了这些 jQuery 文件。此外,我已验证该页面正在输出正确的路径,并且它找到了正确的文件。我试过切换 and 的顺序unobtrusive-ajax.min.jsvalidate.min.js但没有成功。

此外,在我网站的根 web.config 和我的 View 文件夹中的 web.config 中,我包括:

我不知道还能去哪里看。没有抛出 javascript 错误,并且控制器被正确命中,返回 PartialViewResult。HTML 中的 Form 元素填充了所有正确的data-属性。

0 投票
1 回答
643 浏览

javascript - AJAX 请求完成后调用 PartialView 中定义的 JavaScript 函数?

这是我的部分观点:

当我提交表单并收到响应时,我收到 JavaScript 错误:

0 投票
2 回答
264 浏览

c# - Submit Form with Complex DataType to Controller

This is my model

Model

Controller

Form using MVC that submits to controller

How do i build the object XViewModel to pass back to the controller. i have them in three different variables i have tried to do this dataString = { XPersonList:xpersonContent, XContent: xContent, CommentEnabled: true }; but its not working..

0 投票
3 回答
972 浏览

asp.net-mvc - 使用来自不同控制器的 [HttpPost] 在回发所有控制器的操作时查看表单调用

我知道也许标题听起来有点奇怪,但我相信我的问题确实很奇怪。我有一个带有 Razor 视图引擎的 ASP.NET MVC 4 应用程序(这是我的第一个 MVC 实际应用程序)。

我有一个布局视图,我在其中渲染两个部分视图,如下所示:

Login 控制器中的每个操作都只呈现一个局部视图:

只是为了举例说明(两者的构建方式相同),登录部分视图包含这样的 ajax 表单:

来自 Login 控制器(表单的目标)的 Login 操作使用以下属性进行签名(值得一提并注意 HttpPost 之一):

到目前为止,一切都很好......一切都很完美 - 登录和注册操作都没有任何问题。

当我在与主布局一起加载的视图中有 @Html.BeginForm() 时,我想谈论的问题。例如,如果我有这样一个纯粹而简单的形式:

连同控制器 CaptionExtendedController:

所以,最后,在我最终生成的 html 文件中,我将有 3 个表单 - 2 个用于登录和注册 (ajax),还有一个从最后一个视图生成的简单表单。请记住,所有三种形式都是独立的(意味着它们不是另一种形式)。

问题是每次我从最后一个表单中按下“发送”按钮时,所有使用我视图中的 [HttpPost] 属性签名的控制器(登录、来自 LoginController 的注册和来自 CaptionExtendedController 的索引)都会被调用。

为什么???为了进行临时修复,我从 Login 和 Register 操作中删除了 [HttpPost] 属性,现在它可以工作了,但我认为这不正确。

拜托,有人可以向我解释为什么会发生这种情况,并最终指出我解决此问题的正确方向吗?

先感谢您。