【问题标题】:$http.post to MVC controller has a property / parameter confilct$http.post 到 MVC 控制器有属性/参数冲突
【发布时间】:2016-09-02 19:24:44
【问题描述】:

谁能告诉我为什么我不能有一个与 MVC 控制器参数同名的 JSON 属性?我确定我在某处犯了一个愚蠢的错误,但这是场景:

我将 $http.post 提交给 MVC 控制器

$http.post 方法:

return $http.post("/Api/Form/Create/Save/DraftForm/", {"Model":"test"});

MVC 模型

public class FormViewModel
{ 
    public string Model { get; set; } 
}

MVC 控制器

[HttpPost, Route("Api/Form/Create/Save/DraftForm")
public ActionResult Create_Save_DraftForm(FormViewModel model)
{
    ....
}

当 someObj 到达控制器时,它是空的。

但是,如果我将控制器“model”中的参数名称更改为“viewModel”之类的名称,它可以正常工作。

[HttpPost, Route("Api/Form/Create/Save/DraftForm")
public ActionResult Create_Save_DraftForm(FormViewModel viewModel)
{
    ....
}

正如 Shyju 提到的,我还可以将 JSON 对象中的“模型”属性重命名为另一个名称,它也可以正常工作:

public class FormViewModel
{ 
    public string AnotherModel { get; set; } 
}

return $http.post("/Api/Form/Create/Save/DraftForm/", {"AnotherModel":"test"});

【问题讨论】:

  • 可能是模型活页夹中的错误!将您的属性重命名为特定名称,它将起作用(例如:CarModel)
  • 到目前为止,这是我的解决方案。它要么是模型绑定器中的错误,要么是我不正确地使用模型绑定器。如果非要猜的话,我会说是后者。
  • 有人提到我可能想尝试为对象添加另一个级别,但我没有任何运气。
  • 更正,添加另一个级别就可以了。我会发布答案。

标签: angularjs asp.net-mvc http-post


【解决方案1】:

我误解了数据是如何发布到控制器的。

控制器正在获取

{"Model", "test"}, 

但期待

{ "model":
    {"Model", "test"}
}

基本上,传递给控制器​​的数据应该有一个与控制器参数匹配的属性名称,并且该属性应该是一个与控制器中的参数对象匹配的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2016-06-28
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多