- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在绞尽脑汁和关于同一主题的各种 SO 帖子(请参阅 JQuery Ajax and Posting multiple complex objects to asp.net MVC Controller 、 Passing multiple objects to my controller 等),但我无法通过 Ajax 调用向我的 Controller (.NET Core) 发布多个对象.我相信我已经像本教程 (http://www.dotnetcurry.com/aspnet-mvc/1253/multiple-model-objects-input-controller-action-methods) 一样设置了我的代码,并且还使用了这里的建议:http://andrewlock.net/model-binding-json-posts-in-asp-net-core/ 无济于事。
问题:我只能获取第一个对象,不能获取第二个对象进行绑定(bind)。
Controller 方法:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Apply(ApplicationInfoViewModel info, SRAgreementViewModel agreement)
{
if(ModelState.IsValid){
//do stuff. ModelState.IsValid returns false here.
}
}
这是我的 JS:
$(function () {
$("#ApplyBAOForm").submit(function (e) {
var jsonObj = $('#ApplyForm').serialize();
var srFormJsonObj = $('#SRForm').serialize();
$.ajax({
url: "ApplyBao/Apply",
datatype: "json",
contentType: "application/json; charset=utf-8",
data: { info: jsonObj, agreement: srFormJsonObj },
type: "POST"
}).done(function (result) {
console.log("Apply success: " + result);
if (result.type === "success") {
//hooray
}
else {
//boo
}
});
});
});
所以这有点奇怪:这里实际上有来自两个不同表单的数据。 SRform 数据在提交 ApplyForm 之前进行验证(它处于模式中),但实际上只是为了与 ApplyForm 保持持久性而提交。两种形式生成的序列化对象看起来都是正确且相似的(jsonObj 和 srFormObj)。
当我点击 ModelState.IsValid 语句时,它返回 false,因为 SRAgreement 对象本质上为 null(具有默认值)。但是,ApplicationInfoViewModel 对象正确显示了表单中的数据。
我尝试过的其他事情:
可能有更好的方法来做到这一点,但我认为我正在尝试做的事情应该是可行的。
谢谢!
编辑 2:
看来我什至无法绑定(bind)一个 JSON 对象。我必须缺少一些简单的东西。我已将其缩减为仅将两个对象之一作为 JSON 提交:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Apply([FromBody] ApplicationInfoViewModel info)
{
if (ModelState.IsValid)
{
// do stuff
}
}
JS:
$("#ApplyBAOForm").submit(function (e) {
e.preventDefault();
var jsonObj = ConvertFormToJSON($("#ApplyBAOForm"));
var srFormJsonObj = ConvertFormToJSON($("#SRForm"));
var obj2 = JSON.stringify({ info: jsonObj });
$.ajax({
url: "ApplyBao/Apply",
datatype: "json",
contentType: "application/json; charset=utf-8",
data: obj2,
//data: JSON.stringify(jsonObj),
type: "POST"
}).done(function (result) {
console.log("Apply success: " + result);
}
else {
//show some error message or something
}
});
});
});
现在请求看起来像这样:
Request URL:http://localhost:19194/ApplyBao/Apply
Request Method:POST
Status Code:400 Bad Request
Remote Address:[::1]:19194
Response Headers
view parsed
HTTP/1.1 400 Bad Request
Server: Kestrel
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNccmdiMDA3M1xEb2N1bWVudHNcYmFvYWRtaW5pc3RyYXRpb25cc3JjXEJBT0FkbWluaXN0cmF0aW9uXEFwcGx5QmFvXEFwcGx5?=
X-Powered-By: ASP.NET
Date: Thu, 12 Jan 2017 21:59:27 GMT
Content-Length: 0
Request Headers
view parsed
POST /ApplyBao/Apply HTTP/1.1
Host: localhost:19194
Connection: keep-alive
Content-Length: 580
Pragma: no-cache
Cache-Control: no-cache
Accept: */*
Origin: http://localhost:19194
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Content-Type: application/json; charset=UTF-8
Referer: http://localhost:19194/ApplyBao
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8
Cookie: .AspNetCore.Antiforgery.l7Q8WGuEtq8=CfDJ8K9L5D4kNnBPrb3_9Hu-w57rjjf751Qf9eh-z57qWmtMA53AB6FXsZ7pbIuLkdP2F6GjA7TGl0Tz7TfACCn3QeFt_uC-BgsYnk3Nd8z0ZA0c90XVEA90NnQOnmVFRu_KF2_2DXV89Jur84rMa-s26nQ
Request Payload
view parsed
{"info":{"HearAboutUsSelectedId":"137","FirstName":"Ron","LastName":"Bud","MiddleName":"","MaidenName":"","Email":"r@test.com","BirthDate":"1900-01-15","Phone":"123456","Fax":"","Street":"1234","City":"Denton","State":"TX","Zip":"12345","Country":"USA","SelectedExamTrack":"BCaBA","SelectedTranscriptSendMethod":"requested","Degree":"Education","SraId":"00000000-0000-0000-0000-000000000000","__RequestVerificationToken":"CfDJ8K9L5D4kNnBPrb3_9Hu-w56wPCITEDVZQo7flUIB70Pu4Q81TlRXa_oI4t8Bleou6l45oHHmUFrKusKofA6Gey-uSgKP7M3L-DrawE1TVJnrDsULHlnOE9ngg9LuyFK6-cylBJ-91h5fmaico-0yrZE"}}
JSON 现在看起来像一个合适的 JSON 对象,但我的公主似乎在另一座城堡里。管道中是否还有其他我缺少的东西来启用它?
更新:
我终于明白了。结果是 AntiForgery token 导致了请求失败,如此处所述: POSTing complex JSON to ASP.NET Core Controller暂时删除它可以让我继续前进。谢谢!
最佳答案
您实际上并没有发送 2 个对象,您发送的是 1 个对象,其中包含 2 个其他对象。这就是这一行的内容,创建将被发送的单个对象。
data: JSON.stringify( { info: jsonObj, agreement: srFormJsonObj } ), // this is a single object that is created and sent by the http action
您需要在服务器上以相同的方式使用单个模型接收它,然后包含您当前用作方法参数的 2 种类型。
模型代码
public class Model{
public ApplicationInfoViewModel Info{get;set;}
public SRAgreementViewModel Agreement {get;set;}
}
Controller 代码
public IActionResult Apply([FromBody]Model model)
{
if(ModelState.IsValid){
//do stuff. ModelState.IsValid returns false here.
}
}
该错误可能是因为您在 json 对象中发送了 url 编码数据和 json。您应该使用其中之一,但不能同时使用两者。如果您查看最新更新,您会看到为属性 info
和 agreement
发送的值,它们是表单编码的字符串值。
关于c# - 在 .NET 核心中使用 Ajax 发布多个模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41621543/
Linux 有许多跨(假设是 2 个)CPU 内核执行的线程和进程。我希望我的单线程 C/C++ 应用程序成为 CPU0 上的唯一线程。我如何“移动”所有其他线程以使用 CPU1? 我知道我可以使用
我有一个类似于下图的数据库表 Table with 2 columns (UserId and value) 我将传递 UserId 和 2 个字符串。例如:userId: 1, key1: h1,
我想在我的新项目中使用 ASP.NET Core,因为我听说它更快。但是,该项目将使用广泛的数据库访问功能,Entity Framework Core 不支持其中一些功能。我想知道,是否可以使用 En
我已经使用 EntityFrameworkCore.SqlServer 2.0 开发了 asp .net core wep api 2.0 应用程序。它是使用数据库优先方法开发的。当尝试使用 dbco
我已经阅读了很多关于这个主题的文章,但我仍然无法处理这个问题。对不起,如果它是重复的,无论如何! 所以基本上,我正在从头开始构建一个 Angular 应用程序,并且我想按照最佳约定来组织我的代码。我有
我对MPI还是陌生的,所以如果这是一个琐碎的问题,请原谅我。我有一个四核CPU。我想运行一个在单个内核上使用两个进程的OpenMPI C++程序。有什么办法吗?如果是这样,那又如何?我提到了this
下面是一个传播异常处理机制的类问题,所需的输出是异常。任何人都可以解释为什么输出是异常,在此先感谢。 Class Question { public void m1() throws Excep
我想打印每个获得 CPU 时间片的进程的 name 和 pid。可能吗? 最佳答案 对于单个流程,您可以在以下位置获取此信息: /proc//stat 第14和第15个字段分别代表在用户态和内核态花费
我想知道是否可以识别具有特定 thread-id 的线程使用的物理处理器(核心)? 例如,我有一个多线程应用程序,它有两 (2) 个线程(例如,thread-id = 10 和 thread-id =
我有一个需要身份验证的 Solr 核心。假设我有一个用户,密码为password。当我现在尝试在控制台中创建一个 Solr 核心时 bin\solr create -c test 我收到 HTTP 错
我想为与使用它的项目不同的类库中的第二个和后续数据库创建迁移。有皱纹。我永远不会知道连接字符串,直到用户登录并且我可以从目录数据库 (saas) 中获取它。 对于目录数据库,我使用了来自 this 的
我想为一种可以产生 GHC Core 的简单语言创建一个前端。然后我想获取这个输出并通过正常的 GHC 管道运行它。根据this page , 不能直接通过 ghc 命令实现。我想知道是否有任何方法可
阅读文档,我构建了 2 个使用 BLE 连接 2 个 iDevices 的应用程序。 一个设备是中央设备,另一个是外围设备。 Central在寻找Peripheral,当找到它时,探索它的服务和特性,
在我的网络应用程序中,我对长时间运行的任务进行了操作,我想在后台调用此任务。因此,根据文档 .net core 3.1 Queued background tasks我为此使用这样的代码: publi
Solr 1.4 Enterprise Search Server 建议对核心副本进行大量更新,然后将其换成主核心。我正在按照以下步骤操作: 创建准备核心:http://localhost:8983/
它们是否存在,如果存在,文档和代码在哪里? 最佳答案 它们位于 Git 的 test 目录中。 https://github.com/jquery/jquery/tree/master/test 关于
我有一个 Lisp (SBCL 1.0.40.0.debian) 应用程序 (myfitnessdata),它使用以下代码来处理命令行参数: (:use :common-lisp) (:export
Core是GHC的中间语言。阅读Core可以帮助你更好地了解程序的性能。有人向我索要有关阅读 Core 的文档或教程,但我找不到太多。 有哪些文档可用于阅读 GHC Core? 这是我迄今为止发现的内
我有一个核心 WebJob 部署到 Azure Web 应用程序中。我正在使用WebJobs version 3.0.6 . 我注意到,WebJob 代码不会立即拾取对连接字符串和应用程序设置的更改(
我有一个在内部构造和使用 SqlConnection 类的第三方库。我可以从该类继承,但它有大量重载,到目前为止我一直无法找到合适的重载。我想要的是将参数附加到正在使用的连接字符串。 有没有办法在 .
我是一名优秀的程序员,十分优秀!