我正在尝试使用以下方法将使用jQuery Ajax的数据发布到MVC动作。但是在控制器内部,所有模型属性始终都是null
。不知道我在这里想念的是什么。
.CSHTML
<form id="MyForm">
<input name="PersonName" type="text" />
<input name="Address" type="text" />
<select name="States" multiple="multiple">
<option value="TX">Texas</option>
<option value="OK">Oklahoma</option>
<option value="OH">Ohio</option>
</select>
<select name="Status">
<option value="1">Active</option>
<option value="2">Deleted</option>
<option value="3">Pending</option>
</select>
<input type="button" value="Save" id="Save" />
的JavaScript
$(function () {
$("#Save").click(function (e) {
var dataToPost = $("#MyForm").serialize()
$.ajax(
{
type: "POST",
data: JSON.stringify(dataToPost),
url: "Working/Save",
contentType: 'application/json; charset=utf-8'
})
})
})
控制者
public class WorkingController : Controller
{
// GET: Working
public ActionResult Index()
{
return View();
}
public ActionResult Save(WorkingModel model)
{
// All model properties are null here????
return Json("Success");
}
}
模型
public class WorkingModel
{
public string PersonName { get; set; }
public string Address { get; set; }
public string[] States { get; set; }
public string Status { get; set; }
}
EDIT1
我已经添加了上面的模型。stringify
单击保存后,此处显示序列化数据和JSON 数据。
序列化数据
"PersonName=Foo&Address=123+Test+Drive&States=TX&Status=1"
后 JSON.Stringify
"\"PersonName=Foo&Address=123+Test+Drive&States=TX&Status=1\""
我尝试添加HttpPost
属性和[FromBody]
没有运气的属性。
我认为不必将返回类型从更改ActionResult
为JsonResult
。
该URL也是正确的,因为调试器是在action方法中找到QuickWatch
模型属性的位置。
请注意,如果我创建JSON对象并将其发布,如下所示,它将起作用:
var dataToPost = {
PersonName:'Foo',
Address: '123 Test Drive',
State: 'TX',
Status: 1
}
您的JavaScript / jQuery代码可以大大简化,这也许是最好的选择:
$(function () {
$("#MyForm").on('submit', function (e) {
e.preventDefault() // prevent the form's normal submission
var dataToPost = $(this).serialize()
$.post("Working/Save", dataToPost)
.done(function(response, status, jqxhr){
// this is the "success" callback
})
.fail(function(jqxhr, status, error){
// this is the ""error"" callback
})
})
})
您应该处理onsubmit
表单的事件,而不是onclick
按钮的事件-
按钮以外的其他原因可能导致表单被提交。在这种情况下,由于我们要使用AJAX提交表单,因此我们想防止表单的默认提交行为。
.serialize()
已经正确处理了表单的编码,因此您无需对表单值进行JSON编码。这样做很可能是Modelbinder在处理请求时未重建模型的原因。
$.post
是一个辅助功能,用于包装您所需的常规设置工作$.ajax
-此处显示的版本希望将URL
POST到,并将数据POST到。如果您的jQuery代码在View的script元素中,则您可能要使用Url.Action()
帮助程序-
它会根据您的路由规则构建正确的URL。如果您选择走这条路线,则将使用类似于以下内容的内容:
$.post('@Url.Action("Save", "Working")', dataToPost)
然后,我们使用相关的帮助程序来处理成功的响应(带有HTTP-200状态代码的任何内容)和失败的响应(基本上是其他任何内容)。你是什么 做
的那些助手最多是给你。
我正在尝试从表单提交中获取数据。这是密码。 现在的问题是我无法将数据输入我想要的变量。此外,我认为数据是作为字符串而不是数组发送的。这是用于调试目的的警报(数据)的输出 {“问题名称”:“Test”,“pollingStatus”:“0”,“options”: {“1”:“Test7”,“2”:“Test8”,“3”:“Test9”,“4”:“Test10”,“5”:“Test11”},“code
问题内容: 我想使用$ .POST或$ .AJAX实现创建(插入)屏幕。 注意:代码无需AJAX调用即可正常工作..它已经存在..现在我需要进行ajax调用并保存而无需回发。我写了下面的代码: 在提交点击事件时,代码如下: 在服务器端: 问题是,每次它都会调用操作,但在参数param 上找不到数据。我也试图保持-视图模型作为参数,但是它没有用..只是给了我null值。同样,在ajax调用中,它成功
问题内容: 我在尝试将复杂的JSON对象传递给MVC 4控制器操作时遇到麻烦。由于JSON内容是可变的,因此我不希望MVC将JSON的各个属性/元素映射到action方法的参数列表中的参数。我只想在控制器操作中将数据作为单个JSON字符串参数获取。 这是我的动作方法的签名: 这是我尝试从浏览器发布一些JSON数据的尝试: 当我在ConvertLogInfoToXML方法的开头击中断点时,jsonO
问题内容: 我在MVC3中有一个页面,带有链接(Ajax.ActionLink)。当用户单击它时,它将调用控制器的动作,并将结果插入到div中,并带有replace。 代码如下所示: ImageLinkAction是使用图像作为链接的自定义扩展方法,而ShowPopup是显示更新后的div(使其显示为弹出窗口)的javascript函数。 现在,插入到创建弹出窗口的div中的标记代码包含如下形式
问题内容: 我试图实现对包含复杂对象作为参数的控制器操作方法的JQueryAJAX调用。我读了很多博客,并尝试了从中学习到的几种技巧。 我想触发一个异步发布,当用户在某个字段上制表符时调用该异步发布(不是表单保存发布–如我发现的其他示例所示)。 我的意图是: 在客户端上实例化一个对象(不是为View提供类型的ViewModel); 使用视图中多个字段中的数据填充对象; 将此对象转换为JSON; 使
问题内容: 我一直在这里看问题:将MVCajaxjson发布到控制器操作方法,但不幸的是,它似乎并没有帮助我。我的几乎完全相同,除了我的方法签名(但是我已经尝试过了,但仍然没有被击中)。 jQuery的 控制者 但是,无论我尝试什么,我都不会受到打击。通过调试,我知道它发送了一个请求,每次都会得到一个错误。 问题答案: 您的操作需要字符串参数,但是您要发送一个复合对象。 您需要创建一个与您要发送的