这是每个部分。我已经阅读了有关使用JSON.stringify()
的所有问题,但没有一个对我有用。我还尝试使用JSON.stringify()
和contentType: 'application/json'
而不是,但我得到了相同的400错误。
如果我将JavaScript AJAX保持不变,它可以在第一个示例中使用SendEmailAPI
操作中列出的参数,但当我尝试使用> 时映射到视图模型。
public class HomeController : Place.Web.Mvc.BaseController
{
...
[HttpPost]
public ActionResult SendEmailAPI(string FormType, string FirstName, string LastName, string GLobalOrCampusId)
{
if (ModelState.IsValid)
{
...
public class HomeController : Place.Web.Mvc.BaseController
{
...
[HttpPost]
public ActionResult SendEmailAPI(FormViewModel model)
{
if (ModelState.IsValid)
{
...
$.ajax({
url: '/Home/SendEmailAPI',
dataType: 'json',
method: 'POST',
contentType: 'application/json',
data: JSON.stringify({
'FirstName': self.firstName(),
'LastName': self.lastName(),
'GlobalOrCampusId': self.globalOrCampusId(),
'FormType': self.formType()
}),
success: function (data) {
console.log('Success:', data);
},
error: function (data) {
$('#tempErrorSpot').append(data.responseText)
console.warn('Error:', data);
}
})
namespace Place.Request.ViewModels
{
public class FormViewModel : Place.Web.Mvc.BaseViewModel
{
[Display(Name = "Type of Form")]
[Required]
public string FormType { get; set; }
[Required]
[StringLength(50)]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
[StringLength(50)]
[Required]
public string LastName { get; set; }
[Required]
[Display(Name = "Global ID or Campus ID")]
public string GlobalOrCampusId { get; set; }
[Required]
public string Department { get; set; }
public string ResponseMessage { get; internal set; }
}
}
答案 0 :(得分:0)
情况是,在使用字符串参数尝试并使其工作后,我看起来更接近if (ModelState.IsValid)
。
在服务器上进行调试, ModelState.Values.5.Errors.0.ErrorMessage 显示"部门字段是必需的。" 问题显示!
事实证明我在 FormViewModel 上有[Required]
个字段尚未填充(我还没有在UI上实现它们)。稍后在HttpStatusCodeResult(HttpStatusCode.BadRequest)
ModelState.IsValid
语句的逻辑分支中返回通用else
。