Dou*_*bin 3 c# vb.net asp.net-mvc jquery
我有一个控制器,我想通过AJAX发布2个项目:一个复杂的对象(我的整个viewmodel)和一个整数(特定行的id).这个特殊项目是在VB .Net中,但是如果有人能用C#回答这个问题,那就没关系了(我对这两种语言都很了解).这两种语言都可行.
我可以将viewmodel POST到控制器没有任何问题.一旦我尝试包含整数,控制器就不能再发送请求了.我知道这可能是我如何格式化POST的数据的一个问题,但我无法确切地知道我需要做什么.
我的控制器动作如下:
<HttpPost>
Public Function UpdateFromDate(viewModel As RetirementBenefitEstimateViewModel, estimateId) As ActionResult
If viewModel IsNot Nothing AndAlso viewModel.Estimate IsNot Nothing AndAlso viewModel.Estimate.RetirementBenefitsEstimates IsNot Nothing Then
For Each item In viewModel.Estimate.RetirementBenefitsEstimates.Where(Function(est) est.EstimateId = estimateId)
' this is where I update the affected row
item.UpdateFromDate(viewModel.DateOfBirth, viewModel.EmploymentStartDate, viewModel.PersonId)
Next item
End If
' Get the previous ViewModel from session
PerformSessionAction(Of RetirementBenefitEstimateViewModel)(SessionConstants.RetirementEstimate, currentEstimate, SessionAction.GetVar)
' update it's .Estimate property
currentEstimate.Estimate = viewModel.Estimate
' save the updated ViewModel to session
PerformSessionAction(Of RetirementBenefitEstimateViewModel)(SessionConstants.RetirementEstimate, currentEstimate, SessionAction.SetVar)
' finished!
Return New HttpStatusCodeResult(HttpStatusCode.OK)
End Function
Run Code Online (Sandbox Code Playgroud)
我视图中的jquery AJAX调用如下所示:
$.ajax({
type: "POST",
url: '@Url.Action("UpdateFromDate")',
data: { viewModel : model, estimateId : 3 }
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
cache: false,
success: function (msg) {
//alert(JSON.stringify(msg));
return true;
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
//alert(errorThrown);
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
如何发布我的viewmodel和整数(在本例中硬编码为3)?
斯科蒂的帖子让我走上正轨.我很想把它标记为答案,但它有一个小问题.整数将正确POST,但viewmodel在控制器中开始显示为null.修复此问题所需的只是一个简单的JSON.parse调用.
我的AJAX调用最终看起来像:
var params = {
viewModel: JSON.parse(model),
estimateId: 3
};
$.ajax({
url: '@Url.Action("UpdateFromDate")',
type: "POST",
dataType: 'json',
data: JSON.stringify(params),
async: false,
cache: false,
traditional: true,
contentType: 'application/json',
success: function (msg) {
//alert(JSON.stringify(msg));
return true;
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
//alert(errorThrown);
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12799 次 |
| 最近记录: |