Dan*_*can 10 javascript c# asp.net-mvc json asp.net-mvc-4
我的原始json字符串通过AJAX post传递给MVC ActionResult控制器
{"ID":0,"RoutingRuleID":24,"ConditionalType":0,"Field":"Channel","ConditionalOperator":"5","Values":[1,9],"ValueString":""}
Run Code Online (Sandbox Code Playgroud)
但最终发生的事情是,一旦json对象进入MVC控制器,它就会丢失关联数组"值"中的值.其他属性设置正确.
我在C#中的模型类如下:
public class RoutingConditional
{
public int ID { get; set; }
public int ParentID { get; set; }
public string ConditionalType { get; set; }
public string Field { get; set; }
public string ConditionalOperator { get; set; }
public List<string> Values { get; set; }
public string ValueString{get;set;}
public RoutingConditional()
{
//this.Values = new List<string>(); //I tried to initialize it too did not work
}
}
Run Code Online (Sandbox Code Playgroud)
我的MVC控制器
[HttpPost]
public ActionResult EditConditional(RoutingConditional rcview)
{
//rcview.Values = null
}
Run Code Online (Sandbox Code Playgroud)
我的Javascript
$.ajax({
url: actionURL,
type: "post",
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(myModel.RoutingConditional),
........standard success and error
});
Run Code Online (Sandbox Code Playgroud)
为什么它被传入null为数组(List)?
这是一个奇怪的,不确定我可以完全解释(有一个想法),但这就是我做的.删除了有效负载中的所有json参数,除了"Values":[1,9]
它并且工作得很好.
所以开始从最后开始添加每个json参数(幸运的是).当我重新添加"ValueString":""
它时再次被淘汰.所以添加了一些更多的json参数,看看它是否是一个排序问题(例如,没有任何东西可以在数组之后).情况并非如此.
所以开始重命名的东西,当我重命名"ValueString":""
为类似的东西"TmpValueString":""
再次工作.
这是我最好的猜测.ValueString这个单词的名称与第一个字符的另一个属性相匹配.在这个实例中," values -tring"与" values "(数组名称)匹配,从而在与对象模型匹配时抛出MVC活页夹.我不是百分之百,但这就是它的样子.
所以你的解决方案是重命名你的一个道具,使它的名字不构成另一个道具的第一个角色.
另外,想提及ConditionalOperator和ConditionalType名称来反驳任何参数.这些名称的独特之处在于它们不是彼此的子集,而只是包含相同的字符.而值是Valuestring的一个子集,因此我认为这会引起混淆.