Javascript passing null to an ExpandoObject field in C# Controller parameter
My Javascript Code
$('[step="4"]').click(function ()
//shortened for brevety
var _model = new Object();
_model.ItemDesc.value = 'Descript';
//^ throws an error but gets fixed if removing the .value
_model.ItemQty.num = 1;
_model.ItemQty.unit = 'pcs'
$.ajax(
type: "POST",
url: 'CreateItemCallAsync',
data: _model,
success: function (msg)
status = JSON.stringify(msg);
alert('Item created successfully!');
location.reload();
,
error: function (msg)
status = JSON.stringify(msg);
alert('Failed to create item.');
location.reload();
);
);
C# Controller Code
[HttpPost]
public async Task<JsonResult> CreateItemCallAsync(CreateItemModel item)
//breakpoint here
var test = item.ItemDesc;
var qty = item.ItemQty.num; //getting nulls here
var unit = item.ItemQty.unit; //getting nulls here
C# CreateItemModel
public class CreateItemModel
public string ItemName get; set;
public string ItemDesc get; set;
public ExpandoObject ItemQty get; set;
JavaScript Object
[
ItemName : 'Item1',
ItemDesc : 'Descript'
ItemQty : num : 5 , unit: 'pcs'
,
ItemName : 'Item2',
ItemDesc : 'Descript'
ItemQty : num : 1 , unit: 'box'
]
From the code above. I have a JavaScript object passed to my C# controller with a CreateItemModel parameter that has a field of ItemQty as an ExpandoObject. However, after passing to my C# controller. the ItemQty.num and ItemQty.unit are null.
With further investigating, before passing the JavaScript object to C# controller. the Objects are successfully populated.
I need ItemQty as an ExpandoObject because the fields/properites under ItemQty is always changing/dynamic
Questions:
- (Bit of off topic) why
_model.ItemDesc.value = 'Descript'errors? On the other hand_model.ItemDesc = 'Descript'runs without error. - Why am I getting nulls in
ItemQtyproperties?
javascript c# asp.net-mvc json.net expando
|
show 4 more comments
My Javascript Code
$('[step="4"]').click(function ()
//shortened for brevety
var _model = new Object();
_model.ItemDesc.value = 'Descript';
//^ throws an error but gets fixed if removing the .value
_model.ItemQty.num = 1;
_model.ItemQty.unit = 'pcs'
$.ajax(
type: "POST",
url: 'CreateItemCallAsync',
data: _model,
success: function (msg)
status = JSON.stringify(msg);
alert('Item created successfully!');
location.reload();
,
error: function (msg)
status = JSON.stringify(msg);
alert('Failed to create item.');
location.reload();
);
);
C# Controller Code
[HttpPost]
public async Task<JsonResult> CreateItemCallAsync(CreateItemModel item)
//breakpoint here
var test = item.ItemDesc;
var qty = item.ItemQty.num; //getting nulls here
var unit = item.ItemQty.unit; //getting nulls here
C# CreateItemModel
public class CreateItemModel
public string ItemName get; set;
public string ItemDesc get; set;
public ExpandoObject ItemQty get; set;
JavaScript Object
[
ItemName : 'Item1',
ItemDesc : 'Descript'
ItemQty : num : 5 , unit: 'pcs'
,
ItemName : 'Item2',
ItemDesc : 'Descript'
ItemQty : num : 1 , unit: 'box'
]
From the code above. I have a JavaScript object passed to my C# controller with a CreateItemModel parameter that has a field of ItemQty as an ExpandoObject. However, after passing to my C# controller. the ItemQty.num and ItemQty.unit are null.
With further investigating, before passing the JavaScript object to C# controller. the Objects are successfully populated.
I need ItemQty as an ExpandoObject because the fields/properites under ItemQty is always changing/dynamic
Questions:
- (Bit of off topic) why
_model.ItemDesc.value = 'Descript'errors? On the other hand_model.ItemDesc = 'Descript'runs without error. - Why am I getting nulls in
ItemQtyproperties?
javascript c# asp.net-mvc json.net expando
Could you show use your receiveJSONdata?
– D-Shih
Nov 14 '18 at 7:55
Add yourCreateItemModelto the question
– user3559349
Nov 14 '18 at 7:56
1
in the ajax request change the data: _model to data: item: JSON.stringify(_model) as your api end point is expecting the item object
– Hassaan
Nov 14 '18 at 7:57
For point 1 -ItemDescis typeofstring- it does not have a property namedvalue
– user3559349
Nov 14 '18 at 8:06
1
You need to modify the data you are sending if you want to use a Dictionary (using the defaultcontentTypeas you are doing, then it would bevar _model = ItemDesc.value: 'Descript', ItemQty[0].Key: 'num', ItemQty[0].Value: 1, ItemQty[1].Key: 'unit', ItemQty[1].Value: 'pcs' ;
– user3559349
Nov 14 '18 at 8:26
|
show 4 more comments
My Javascript Code
$('[step="4"]').click(function ()
//shortened for brevety
var _model = new Object();
_model.ItemDesc.value = 'Descript';
//^ throws an error but gets fixed if removing the .value
_model.ItemQty.num = 1;
_model.ItemQty.unit = 'pcs'
$.ajax(
type: "POST",
url: 'CreateItemCallAsync',
data: _model,
success: function (msg)
status = JSON.stringify(msg);
alert('Item created successfully!');
location.reload();
,
error: function (msg)
status = JSON.stringify(msg);
alert('Failed to create item.');
location.reload();
);
);
C# Controller Code
[HttpPost]
public async Task<JsonResult> CreateItemCallAsync(CreateItemModel item)
//breakpoint here
var test = item.ItemDesc;
var qty = item.ItemQty.num; //getting nulls here
var unit = item.ItemQty.unit; //getting nulls here
C# CreateItemModel
public class CreateItemModel
public string ItemName get; set;
public string ItemDesc get; set;
public ExpandoObject ItemQty get; set;
JavaScript Object
[
ItemName : 'Item1',
ItemDesc : 'Descript'
ItemQty : num : 5 , unit: 'pcs'
,
ItemName : 'Item2',
ItemDesc : 'Descript'
ItemQty : num : 1 , unit: 'box'
]
From the code above. I have a JavaScript object passed to my C# controller with a CreateItemModel parameter that has a field of ItemQty as an ExpandoObject. However, after passing to my C# controller. the ItemQty.num and ItemQty.unit are null.
With further investigating, before passing the JavaScript object to C# controller. the Objects are successfully populated.
I need ItemQty as an ExpandoObject because the fields/properites under ItemQty is always changing/dynamic
Questions:
- (Bit of off topic) why
_model.ItemDesc.value = 'Descript'errors? On the other hand_model.ItemDesc = 'Descript'runs without error. - Why am I getting nulls in
ItemQtyproperties?
javascript c# asp.net-mvc json.net expando
My Javascript Code
$('[step="4"]').click(function ()
//shortened for brevety
var _model = new Object();
_model.ItemDesc.value = 'Descript';
//^ throws an error but gets fixed if removing the .value
_model.ItemQty.num = 1;
_model.ItemQty.unit = 'pcs'
$.ajax(
type: "POST",
url: 'CreateItemCallAsync',
data: _model,
success: function (msg)
status = JSON.stringify(msg);
alert('Item created successfully!');
location.reload();
,
error: function (msg)
status = JSON.stringify(msg);
alert('Failed to create item.');
location.reload();
);
);
C# Controller Code
[HttpPost]
public async Task<JsonResult> CreateItemCallAsync(CreateItemModel item)
//breakpoint here
var test = item.ItemDesc;
var qty = item.ItemQty.num; //getting nulls here
var unit = item.ItemQty.unit; //getting nulls here
C# CreateItemModel
public class CreateItemModel
public string ItemName get; set;
public string ItemDesc get; set;
public ExpandoObject ItemQty get; set;
JavaScript Object
[
ItemName : 'Item1',
ItemDesc : 'Descript'
ItemQty : num : 5 , unit: 'pcs'
,
ItemName : 'Item2',
ItemDesc : 'Descript'
ItemQty : num : 1 , unit: 'box'
]
From the code above. I have a JavaScript object passed to my C# controller with a CreateItemModel parameter that has a field of ItemQty as an ExpandoObject. However, after passing to my C# controller. the ItemQty.num and ItemQty.unit are null.
With further investigating, before passing the JavaScript object to C# controller. the Objects are successfully populated.
I need ItemQty as an ExpandoObject because the fields/properites under ItemQty is always changing/dynamic
Questions:
- (Bit of off topic) why
_model.ItemDesc.value = 'Descript'errors? On the other hand_model.ItemDesc = 'Descript'runs without error. - Why am I getting nulls in
ItemQtyproperties?
javascript c# asp.net-mvc json.net expando
javascript c# asp.net-mvc json.net expando
edited Nov 14 '18 at 8:03
Hexxed
asked Nov 14 '18 at 7:53
HexxedHexxed
485317
485317
Could you show use your receiveJSONdata?
– D-Shih
Nov 14 '18 at 7:55
Add yourCreateItemModelto the question
– user3559349
Nov 14 '18 at 7:56
1
in the ajax request change the data: _model to data: item: JSON.stringify(_model) as your api end point is expecting the item object
– Hassaan
Nov 14 '18 at 7:57
For point 1 -ItemDescis typeofstring- it does not have a property namedvalue
– user3559349
Nov 14 '18 at 8:06
1
You need to modify the data you are sending if you want to use a Dictionary (using the defaultcontentTypeas you are doing, then it would bevar _model = ItemDesc.value: 'Descript', ItemQty[0].Key: 'num', ItemQty[0].Value: 1, ItemQty[1].Key: 'unit', ItemQty[1].Value: 'pcs' ;
– user3559349
Nov 14 '18 at 8:26
|
show 4 more comments
Could you show use your receiveJSONdata?
– D-Shih
Nov 14 '18 at 7:55
Add yourCreateItemModelto the question
– user3559349
Nov 14 '18 at 7:56
1
in the ajax request change the data: _model to data: item: JSON.stringify(_model) as your api end point is expecting the item object
– Hassaan
Nov 14 '18 at 7:57
For point 1 -ItemDescis typeofstring- it does not have a property namedvalue
– user3559349
Nov 14 '18 at 8:06
1
You need to modify the data you are sending if you want to use a Dictionary (using the defaultcontentTypeas you are doing, then it would bevar _model = ItemDesc.value: 'Descript', ItemQty[0].Key: 'num', ItemQty[0].Value: 1, ItemQty[1].Key: 'unit', ItemQty[1].Value: 'pcs' ;
– user3559349
Nov 14 '18 at 8:26
Could you show use your receive
JSON data?– D-Shih
Nov 14 '18 at 7:55
Could you show use your receive
JSON data?– D-Shih
Nov 14 '18 at 7:55
Add your
CreateItemModel to the question– user3559349
Nov 14 '18 at 7:56
Add your
CreateItemModel to the question– user3559349
Nov 14 '18 at 7:56
1
1
in the ajax request change the data: _model to data: item: JSON.stringify(_model) as your api end point is expecting the item object
– Hassaan
Nov 14 '18 at 7:57
in the ajax request change the data: _model to data: item: JSON.stringify(_model) as your api end point is expecting the item object
– Hassaan
Nov 14 '18 at 7:57
For point 1 -
ItemDesc is typeof string - it does not have a property named value– user3559349
Nov 14 '18 at 8:06
For point 1 -
ItemDesc is typeof string - it does not have a property named value– user3559349
Nov 14 '18 at 8:06
1
1
You need to modify the data you are sending if you want to use a Dictionary (using the default
contentType as you are doing, then it would be var _model = ItemDesc.value: 'Descript', ItemQty[0].Key: 'num', ItemQty[0].Value: 1, ItemQty[1].Key: 'unit', ItemQty[1].Value: 'pcs' ;– user3559349
Nov 14 '18 at 8:26
You need to modify the data you are sending if you want to use a Dictionary (using the default
contentType as you are doing, then it would be var _model = ItemDesc.value: 'Descript', ItemQty[0].Key: 'num', ItemQty[0].Value: 1, ItemQty[1].Key: 'unit', ItemQty[1].Value: 'pcs' ;– user3559349
Nov 14 '18 at 8:26
|
show 4 more comments
1 Answer
1
active
oldest
votes
(Bit of off topic) why
_model.ItemDesc.value = 'Descript'errors? On the other hand_model.ItemDesc = 'Descript'runs without error.
Because there isn't a property ItemDesc,ItemQty,ItemQty in original javascript Object.
You can try to create an anonymous JSON object for your javascript code.
var _model =
ItemDesc:
value : "Descript"
,
ItemQty :
num : 1,
unit :'pcs'
;
instead of
var _model = new Object();
_model.ItemDesc.value = 'Descript';
_model.ItemQty.num = 1;
_model.ItemQty.unit = 'pcs'
your c# model might look like because your currently ItemDesc is an object instead of a string value.
Why am I getting
nullsinItemQtyproperties?
Because default ModelBindiner can't find ExpandoObject with your JSON key ItemQty object.
public class ItemDesc
public string value get; set;
public class ItemQty
public int num get; set;
public string unit get; set;
public class CreateItemModel
public ItemDesc ItemDescContext get; set;
public ItemQty ItemQtyContext get; set;
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53295349%2fjavascript-passing-null-to-an-expandoobject-field-in-c-sharp-controller-paramete%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
(Bit of off topic) why
_model.ItemDesc.value = 'Descript'errors? On the other hand_model.ItemDesc = 'Descript'runs without error.
Because there isn't a property ItemDesc,ItemQty,ItemQty in original javascript Object.
You can try to create an anonymous JSON object for your javascript code.
var _model =
ItemDesc:
value : "Descript"
,
ItemQty :
num : 1,
unit :'pcs'
;
instead of
var _model = new Object();
_model.ItemDesc.value = 'Descript';
_model.ItemQty.num = 1;
_model.ItemQty.unit = 'pcs'
your c# model might look like because your currently ItemDesc is an object instead of a string value.
Why am I getting
nullsinItemQtyproperties?
Because default ModelBindiner can't find ExpandoObject with your JSON key ItemQty object.
public class ItemDesc
public string value get; set;
public class ItemQty
public int num get; set;
public string unit get; set;
public class CreateItemModel
public ItemDesc ItemDescContext get; set;
public ItemQty ItemQtyContext get; set;
add a comment |
(Bit of off topic) why
_model.ItemDesc.value = 'Descript'errors? On the other hand_model.ItemDesc = 'Descript'runs without error.
Because there isn't a property ItemDesc,ItemQty,ItemQty in original javascript Object.
You can try to create an anonymous JSON object for your javascript code.
var _model =
ItemDesc:
value : "Descript"
,
ItemQty :
num : 1,
unit :'pcs'
;
instead of
var _model = new Object();
_model.ItemDesc.value = 'Descript';
_model.ItemQty.num = 1;
_model.ItemQty.unit = 'pcs'
your c# model might look like because your currently ItemDesc is an object instead of a string value.
Why am I getting
nullsinItemQtyproperties?
Because default ModelBindiner can't find ExpandoObject with your JSON key ItemQty object.
public class ItemDesc
public string value get; set;
public class ItemQty
public int num get; set;
public string unit get; set;
public class CreateItemModel
public ItemDesc ItemDescContext get; set;
public ItemQty ItemQtyContext get; set;
add a comment |
(Bit of off topic) why
_model.ItemDesc.value = 'Descript'errors? On the other hand_model.ItemDesc = 'Descript'runs without error.
Because there isn't a property ItemDesc,ItemQty,ItemQty in original javascript Object.
You can try to create an anonymous JSON object for your javascript code.
var _model =
ItemDesc:
value : "Descript"
,
ItemQty :
num : 1,
unit :'pcs'
;
instead of
var _model = new Object();
_model.ItemDesc.value = 'Descript';
_model.ItemQty.num = 1;
_model.ItemQty.unit = 'pcs'
your c# model might look like because your currently ItemDesc is an object instead of a string value.
Why am I getting
nullsinItemQtyproperties?
Because default ModelBindiner can't find ExpandoObject with your JSON key ItemQty object.
public class ItemDesc
public string value get; set;
public class ItemQty
public int num get; set;
public string unit get; set;
public class CreateItemModel
public ItemDesc ItemDescContext get; set;
public ItemQty ItemQtyContext get; set;
(Bit of off topic) why
_model.ItemDesc.value = 'Descript'errors? On the other hand_model.ItemDesc = 'Descript'runs without error.
Because there isn't a property ItemDesc,ItemQty,ItemQty in original javascript Object.
You can try to create an anonymous JSON object for your javascript code.
var _model =
ItemDesc:
value : "Descript"
,
ItemQty :
num : 1,
unit :'pcs'
;
instead of
var _model = new Object();
_model.ItemDesc.value = 'Descript';
_model.ItemQty.num = 1;
_model.ItemQty.unit = 'pcs'
your c# model might look like because your currently ItemDesc is an object instead of a string value.
Why am I getting
nullsinItemQtyproperties?
Because default ModelBindiner can't find ExpandoObject with your JSON key ItemQty object.
public class ItemDesc
public string value get; set;
public class ItemQty
public int num get; set;
public string unit get; set;
public class CreateItemModel
public ItemDesc ItemDescContext get; set;
public ItemQty ItemQtyContext get; set;
edited Nov 14 '18 at 8:07
answered Nov 14 '18 at 8:01
D-ShihD-Shih
26.3k61531
26.3k61531
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53295349%2fjavascript-passing-null-to-an-expandoobject-field-in-c-sharp-controller-paramete%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Could you show use your receive
JSONdata?– D-Shih
Nov 14 '18 at 7:55
Add your
CreateItemModelto the question– user3559349
Nov 14 '18 at 7:56
1
in the ajax request change the data: _model to data: item: JSON.stringify(_model) as your api end point is expecting the item object
– Hassaan
Nov 14 '18 at 7:57
For point 1 -
ItemDescis typeofstring- it does not have a property namedvalue– user3559349
Nov 14 '18 at 8:06
1
You need to modify the data you are sending if you want to use a Dictionary (using the default
contentTypeas you are doing, then it would bevar _model = ItemDesc.value: 'Descript', ItemQty[0].Key: 'num', ItemQty[0].Value: 1, ItemQty[1].Key: 'unit', ItemQty[1].Value: 'pcs' ;– user3559349
Nov 14 '18 at 8:26