我一直试图发布Ajax帖子,但数据总是在Controller端获得Null。请帮助: -
**Model:-**
public class UpdateProxyTracker
{
public string Test_Reference_Id { get; set; }
public string Owner { get; set; }
public string Remarks { get; set; }
public string Status { get; set; }
}
**View:**
@using (Html.BeginForm("UpdateTracker", "Home", FormMethod.Post, new { id = "optionForm" }))
{
<div>
<fieldset style="background-color: #FFFFFF">
<legend>Update Details</legend>
<table>
<tr>
<td>Test Ref Id</td>
<td>
<input id="testrefId" readonly="readonly" type="text" value=@Model.Test_Reference_Id>
</td>
</tr>
......
...
}
**JQuery:**
$(document).ready(function () {
$("#SaveT").click(function () {
var status = $("#statusddl").val();
var owner = $("#owner").val();
var remark = $("#remark").val();
var test_Reference_Id = $("#testrefId").val();
var data =
{
'Test_Reference_Id': test_Reference_Id,
'Owner': owner,
'Remarks': remark,
'Status': status
};
$.ajax({
url: '@Url.Action("UpdateTracker", "Home")',
type: "POST",
contentType: 'application/json',
dataType: 'json',
data: data,
success: function (msg) {
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
});
});
**Controller:**
public ActionResult UpdateTracker(UpdateProxyTracker data)
{
SepHomeService svc = new SepHomeService();
bool isValid = svc.UpdateData(data);
var result = svc.GetData();
return View("Dataview", result);
}
击溃: routes.MapRoute( 名称:“默认”, url:“{controller} / {action} / {id}”, 默认值:new {controller =“Home”,action =“Index”,id = UrlParameter.Optional} );
问题 这里的数据总是空的。 我尝试将数据传递为JSON.stringify(数据),但没有帮助 我们是否需要添加@ Html.begin表单标记来进行ajax调用 此处的数据在ajax调用之前填充,但未传递给控制器 我们需要更新Route以进行正确的Ajax调用吗? 请建议
答案 0 :(得分:3)
你需要&#34;劫持&#34;表单并使用jQ AJAX发送数据。下一个示例展示了如何制作这个:
// jQ
$(function() {
$("form").submit(function(e) {
e.preventDefault();
e.returnValue = false;
var status = $("#statusddl").val();
var owner = $("#owner").val();
var remark = $("#remark").val();
var test_Reference_Id = $("#testrefId").val();
// ...
});
});
$('form').submit
是快捷方式,用于处理网页中任何表单的提交事件。
来电e.preventDefault()
和e.returnValue = false
有助于防止提交该表单。只有你需要把AJAX。
我希望此代码可以帮助您
<强>更新强> 加上之前的解决方案,您需要将数据变量修改为下一个代码:
var data = {
"data": {
"Test_Reference_Id": test_Reference_Id,
"Owner": owner,
"Remarks": remark,
"Status": status
}
};
这是必要的,因为您希望控制器中有一个名为data
的参数。此外,JSON中的属性必须使用双引号("
)而不是单引号,就像您使用的那样。
答案 1 :(得分:1)
试试这个,对我有用
不使用
contentType: 'application/json',
dataType: 'json',
如果方法不是JsonResult,则这些东西仅适用于JsonResult
而不是ActionResult
使用下面的方法。
$.ajax({
type: "POST",
data: {data:data},
url: '../{ControllerName}/{MethodName}',
success: function (response) {
},
error: function (response) {
alert(errorThrown);
}
});
答案 2 :(得分:0)
$.ajax({
url: '@Url.Action("UpdateTracker", "Home")',
type: "POST",
contentType: 'application/json',
dataType: 'json',
data: {data:data},/**important*/
success: function (msg) {
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
可能需要参数名称;