- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在构建一个 ASP.NET MVC 站点,我想在其中的某些地方实现 jQuery AJAX 调用。我已经阅读了有关该主题的内容,但仍有一些问题。
首先,通过 AJAX 调用传递数据并将其模型绑定(bind)到我的 Controller Action 中的对象的正确方法是什么?
到目前为止,我在一些地方读到 jQuery 以键值对的形式发送数据,因此我不需要做任何额外的事情,而在其他地方,我读到我必须首先使用JSON 反序列化器,然后绑定(bind)结果。我目前已经将我的 Controller 操作实现为接受 HTTP POST
的操作。
它实际上是如何工作的?你能给我一些示例代码吗?
接下来,如何发送多条数据?例如,我有一个提交评论的AJAX方法。在 AJAX 调用中,我想发送两个参数:一个 ID 参数(发表评论的帖子)和一个 Text 参数(评论的文本)。
我认为最好的方法是创建一个包含所有参数的类,然后通过 AJAX 调用发送该类,以绑定(bind)到 Controller 内的相同类中。我说得对吗?
最后,是否会通过这样的 AJAX 调用传递表单例份验证?
如果用户已经登录,是否会发送身份以便我可以像往常一样在我的 Controller 操作中使用它?
提前致谢。
最佳答案
您可以按如下方式发布数据,这非常简单:
var formData = $(this).serialize()
+ "&Id=" + Id
+ "&otherVal=" + otherVal;
$.post($(this).attr("action"), formData, function(res)
{
// do stuff with response
}, "json");
ActionMethod 定义为
public ActionResult MyAction(int id, string otherVal)
{
return PartialView();
}
模型绑定(bind)器知道将您传递给要绑定(bind)到的变量的参数名称匹配。
或者您可以使用如下功能从表单上的所有选择下拉列表和复选框中提取数据:
// frm is $('form') that gets passed to the function
// includeContextObjects determines if it's only the elements in the
// current form, or from all over the page.
function GatherFormDataAndSubmit(frm, includeContextObjects)
{
var data = frm.serializeObject();
data = GetSelectData(frm, data, includeContextObjects);
data = GetCheckBoxData(frm, data, includeContextObjects);
$.post(frm.attr("action"), data, function(res)
{
UpdateSuccessMessage(res);
}, "json");
}
function GetSelectData(frm, data, includeContextObjects)
{
var objSelects;
if (includeContextObjects)
{
objSelects = $("select");
}
else
{
objSelects = frm.find("select");
}
if (objSelects.length)
{
data = GetDataObjectFromSelects(objSelects, data);
}
return data;
}
function GetDataObjectFromSelects(selects, data)
{
var valuesArray = selects.map(function()
{
return $.getAttributes($(this).find(":selected"));
});
var obj = new Array();
$.each(valuesArray, function(item) { obj.push($(this)[0]); });
if (!data)
{
data = {};
}
$.each(obj, function()
{
for (var propertyName in $(this)[0])
{
data[propertyName] = $(this).attr(propertyName);
}
});
return data;
}
function GetCheckBoxData(frm, data, includeContextObjects)
{
var objCheckBoxes;
if (includeContextObjects)
{
objCheckBoxes = $("input:checked");
}
else
{
objCheckBoxes = frm.find("input:checked");
}
if (objCheckBoxes.length)
{
data = GetDataObjectFromCheckBoxes(objCheckBoxes, data);
}
return data;
}
function GetDataObjectFromCheckBoxes(objCheckBoxes, data)
{
var valuesArray = objCheckBoxes.map(function()
{
return $.getAttributes($(this));
});
var obj = new Array();
$.each(valuesArray, function(item) { obj.push($(this)[0]); });
$.each(obj, function(i)
{
data["configuredFactsheets[" + i + "].configuredFactsheetId"] = $(this).attr("configuredFactsheetId");
});
return data;
}
请注意,serializeObject() 依赖于 this ,而 getAttributes 依赖于 this
在这种情况下,我的操作方法是:
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult EditConfiguredPanel(ConfiguredPanel cfp, List<ConfiguredFactsheet> configuredFactsheets)
{
bool success = repos.UpdateConfiguredPanel(cfp, configuredFactsheets);
return Json(success);
}
哪里List<ConfiguredFactsheet>
的 ID 对应于使用 GetCheckBoxData()
收集的 ID ConfiguredPanel 的 id 对应于从选定的选择列表选项中收集的 id。
修改它以包含评论文本和另一个 Id 值并不需要太多。
Forms Authentication 数据将作为 cookie 与每个请求一起传输,所以是的。
关于c# - 在 ASP.NET MVC 站点中实现 jQuery AJAX 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3098032/
为了让我的代码几乎完全用 Jquery 编写,我想用 Jquery 重写 AJAX 调用。 这是从网页到 Tomcat servlet 的调用。 我目前情况的类似代码: var http = new
我想使用 JNI 从 Java 调用 C 函数。在 C 函数中,我想创建一个 JVM 并调用一些 Java 对象。当我尝试创建 JVM 时,JNI_CreateJavaVM 返回 -1。 所以,我想知
环顾四周,我发现从 HTML 调用 Javascript 函数的最佳方法是将函数本身放在 HTML 中,而不是外部 Javascript 文件。所以我一直在网上四处寻找,找到了一些简短的教程,我可以根
我有这个组件: import {Component} from 'angular2/core'; import {UserServices} from '../services/UserService
我正在尝试用 C 实现一个简单的 OpenSSL 客户端/服务器模型,并且对 BIO_* 调用的使用感到好奇,与原始 SSL_* 调用相比,它允许一些不错的功能。 我对此比较陌生,所以我可能会完全错误
我正在处理有关异步调用的难题: 一个 JQuery 函数在用户点击时执行,然后调用一个 php 文件来检查用户输入是否与数据库中已有的信息重叠。如果是这样,则应提示用户确认是否要继续或取消,如果他单击
我有以下类(class)。 public Task { public static Task getInstance(String taskName) { return new
嘿,我正在构建一个小游戏,我正在通过制作一个数字 vector 来创建关卡,该数字 vector 通过枚举与 1-4 种颜色相关联。问题是循环(在 Simon::loadChallenge 中)我将颜
我有一个java spring boot api(数据接收器),客户端调用它来保存一些数据。一旦我完成了数据的持久化,我想进行另一个 api 调用(应该处理持久化的数据 - 数据聚合器),它应该自行异
首先,这涉及桌面应用程序而不是 ASP .Net 应用程序。 我已经为我的项目添加了一个 Web 引用,并构建了各种数据对象,例如 PayerInfo、Address 和 CreditCard。但问题
我如何告诉 FAKE 编译 .fs文件使用 fsc ? 解释如何传递参数的奖励积分,如 -a和 -target:dll . 编辑:我应该澄清一下,我正在尝试在没有 MSBuild/xbuild/.sl
我使用下划线模板配置了一个简单的主干模型和 View 。两个单独的 API 使用完全相同的配置。 API 1 按预期工作。 要重现该问题,请注释掉 API 1 的 URL,并取消注释 API 2 的
我不确定什么是更好的做法或更现实的做法。我希望从头开始创建目录系统,但不确定最佳方法是什么。 我想我在需要显示信息时使用对象,例如 info.php?id=100。有这样的代码用于显示 Game.cl
from datetime import timedelta class A: def __abs__(self): return -self class B1(A):
我在操作此生命游戏示例代码中的数组时遇到问题。 情况: “生命游戏”是约翰·康威发明的一种细胞自动化技术。它由一个细胞网格组成,这些细胞可以根据数学规则生存/死亡/繁殖。该网格中的活细胞和死细胞通过
如果我像这样调用 read() 来读取文件: unsigned char buf[512]; memset(buf, 0, sizeof(unsigned char) * 512); int fd;
我用 C 编写了一个简单的服务器,并希望调用它的功能与调用其他 C 守护程序的功能相同(例如使用 ./ftpd start 调用它并使用 ./ftpd stop 关闭该实例)。显然我遇到的问题是我不知
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
我希望能够从 cmd 在我的 Windows 10 计算机上调用 python3。 我已重新安装 Python3.7 以确保选择“添加到路径”选项,但仍无法调用 python3 并使 CMD 启动 P
我是一名优秀的程序员,十分优秀!