Controller action with multiple parameters
I am trying to understand what I think is a model binding problem in my ASP.NET Core project. I have the following 'Index' controller action:
[HttpGet]
public async Task<IActionResult> Index(SortFilterIndexOptions options) { ... }
The SortFilterIndexOptions
are four members defined in the following class:
public class SortFilterIndexOptions
{
public int SelectedBirdId { get; set; }
public bool ShowAll { get; set; }
public bool ShowInTable { get; set; }
public int page { get; set; }
}
These enable the user to filter a paged index page. The bool members are linked to checkbox controls.
I have a fault if the 'ShowAll' bool member is changed to TRUE and then try to navigate to a different page. As the screenshot, below, shows the 'ShowAll' parameter part of the url then contains two bool values ('ShowAll=true, false'):
which of course results in a parse error ('FormatException: String was not recognized as a valid Boolean').
What's happening here? It only happens when the 'ShowAll' parameter is toggled to TRUE. Is it a routing problem because it does not follow the default route pattern? Or is it a problem with the ModelBinder? I am just trying to understand what is going on so I can take the right action. Any help would be appreciated...
Update
This is now issue #3246 ('ModelBinding error with boolean values') on the asp/Home GitHub repository (originally raised by me as issue #1711 on the dotnet/Core repository).
c# asp.net-core asp.net-core-routing
add a comment |
I am trying to understand what I think is a model binding problem in my ASP.NET Core project. I have the following 'Index' controller action:
[HttpGet]
public async Task<IActionResult> Index(SortFilterIndexOptions options) { ... }
The SortFilterIndexOptions
are four members defined in the following class:
public class SortFilterIndexOptions
{
public int SelectedBirdId { get; set; }
public bool ShowAll { get; set; }
public bool ShowInTable { get; set; }
public int page { get; set; }
}
These enable the user to filter a paged index page. The bool members are linked to checkbox controls.
I have a fault if the 'ShowAll' bool member is changed to TRUE and then try to navigate to a different page. As the screenshot, below, shows the 'ShowAll' parameter part of the url then contains two bool values ('ShowAll=true, false'):
which of course results in a parse error ('FormatException: String was not recognized as a valid Boolean').
What's happening here? It only happens when the 'ShowAll' parameter is toggled to TRUE. Is it a routing problem because it does not follow the default route pattern? Or is it a problem with the ModelBinder? I am just trying to understand what is going on so I can take the right action. Any help would be appreciated...
Update
This is now issue #3246 ('ModelBinding error with boolean values') on the asp/Home GitHub repository (originally raised by me as issue #1711 on the dotnet/Core repository).
c# asp.net-core asp.net-core-routing
The error message is pretty clear...ShowAll=true,false
is not valid as a boolean. Should work with justShowAll=true
– Nkosi
May 16 '18 at 10:34
Is this a checkbox in a form which is sent through GET?
– CodeCaster
May 16 '18 at 10:41
1
Yes, I am trying to work out why it adding the two Boolean values. When I click the next page button. This happens the ShowAll is toggled to true. Why is it appending the second ‘false’ value in the url?
– Winthorpe
May 16 '18 at 10:43
@CodeCaster. It is a Bootstrap Toggle control. So the same as a checkbox. In a form to a GET
– Winthorpe
May 16 '18 at 10:44
add a comment |
I am trying to understand what I think is a model binding problem in my ASP.NET Core project. I have the following 'Index' controller action:
[HttpGet]
public async Task<IActionResult> Index(SortFilterIndexOptions options) { ... }
The SortFilterIndexOptions
are four members defined in the following class:
public class SortFilterIndexOptions
{
public int SelectedBirdId { get; set; }
public bool ShowAll { get; set; }
public bool ShowInTable { get; set; }
public int page { get; set; }
}
These enable the user to filter a paged index page. The bool members are linked to checkbox controls.
I have a fault if the 'ShowAll' bool member is changed to TRUE and then try to navigate to a different page. As the screenshot, below, shows the 'ShowAll' parameter part of the url then contains two bool values ('ShowAll=true, false'):
which of course results in a parse error ('FormatException: String was not recognized as a valid Boolean').
What's happening here? It only happens when the 'ShowAll' parameter is toggled to TRUE. Is it a routing problem because it does not follow the default route pattern? Or is it a problem with the ModelBinder? I am just trying to understand what is going on so I can take the right action. Any help would be appreciated...
Update
This is now issue #3246 ('ModelBinding error with boolean values') on the asp/Home GitHub repository (originally raised by me as issue #1711 on the dotnet/Core repository).
c# asp.net-core asp.net-core-routing
I am trying to understand what I think is a model binding problem in my ASP.NET Core project. I have the following 'Index' controller action:
[HttpGet]
public async Task<IActionResult> Index(SortFilterIndexOptions options) { ... }
The SortFilterIndexOptions
are four members defined in the following class:
public class SortFilterIndexOptions
{
public int SelectedBirdId { get; set; }
public bool ShowAll { get; set; }
public bool ShowInTable { get; set; }
public int page { get; set; }
}
These enable the user to filter a paged index page. The bool members are linked to checkbox controls.
I have a fault if the 'ShowAll' bool member is changed to TRUE and then try to navigate to a different page. As the screenshot, below, shows the 'ShowAll' parameter part of the url then contains two bool values ('ShowAll=true, false'):
which of course results in a parse error ('FormatException: String was not recognized as a valid Boolean').
What's happening here? It only happens when the 'ShowAll' parameter is toggled to TRUE. Is it a routing problem because it does not follow the default route pattern? Or is it a problem with the ModelBinder? I am just trying to understand what is going on so I can take the right action. Any help would be appreciated...
Update
This is now issue #3246 ('ModelBinding error with boolean values') on the asp/Home GitHub repository (originally raised by me as issue #1711 on the dotnet/Core repository).
c# asp.net-core asp.net-core-routing
c# asp.net-core asp.net-core-routing
edited Nov 15 '18 at 0:27
abatishchev
69.8k70263396
69.8k70263396
asked May 16 '18 at 7:44
WinthorpeWinthorpe
95215
95215
The error message is pretty clear...ShowAll=true,false
is not valid as a boolean. Should work with justShowAll=true
– Nkosi
May 16 '18 at 10:34
Is this a checkbox in a form which is sent through GET?
– CodeCaster
May 16 '18 at 10:41
1
Yes, I am trying to work out why it adding the two Boolean values. When I click the next page button. This happens the ShowAll is toggled to true. Why is it appending the second ‘false’ value in the url?
– Winthorpe
May 16 '18 at 10:43
@CodeCaster. It is a Bootstrap Toggle control. So the same as a checkbox. In a form to a GET
– Winthorpe
May 16 '18 at 10:44
add a comment |
The error message is pretty clear...ShowAll=true,false
is not valid as a boolean. Should work with justShowAll=true
– Nkosi
May 16 '18 at 10:34
Is this a checkbox in a form which is sent through GET?
– CodeCaster
May 16 '18 at 10:41
1
Yes, I am trying to work out why it adding the two Boolean values. When I click the next page button. This happens the ShowAll is toggled to true. Why is it appending the second ‘false’ value in the url?
– Winthorpe
May 16 '18 at 10:43
@CodeCaster. It is a Bootstrap Toggle control. So the same as a checkbox. In a form to a GET
– Winthorpe
May 16 '18 at 10:44
The error message is pretty clear...
ShowAll=true,false
is not valid as a boolean. Should work with just ShowAll=true
– Nkosi
May 16 '18 at 10:34
The error message is pretty clear...
ShowAll=true,false
is not valid as a boolean. Should work with just ShowAll=true
– Nkosi
May 16 '18 at 10:34
Is this a checkbox in a form which is sent through GET?
– CodeCaster
May 16 '18 at 10:41
Is this a checkbox in a form which is sent through GET?
– CodeCaster
May 16 '18 at 10:41
1
1
Yes, I am trying to work out why it adding the two Boolean values. When I click the next page button. This happens the ShowAll is toggled to true. Why is it appending the second ‘false’ value in the url?
– Winthorpe
May 16 '18 at 10:43
Yes, I am trying to work out why it adding the two Boolean values. When I click the next page button. This happens the ShowAll is toggled to true. Why is it appending the second ‘false’ value in the url?
– Winthorpe
May 16 '18 at 10:43
@CodeCaster. It is a Bootstrap Toggle control. So the same as a checkbox. In a form to a GET
– Winthorpe
May 16 '18 at 10:44
@CodeCaster. It is a Bootstrap Toggle control. So the same as a checkbox. In a form to a GET
– Winthorpe
May 16 '18 at 10:44
add a comment |
2 Answers
2
active
oldest
votes
The error message is pretty clear...ShowAll=true,false
is not valid as a Boolean.
The model binder is receiving the following string "true,false"
from the query string for that parameter and would then try to parse that as a Boolean, which would fail as you have already seen.
Similar to trying
bool value = bool.Parse("true,false");
Should work with just ShowAll=true
1
"When the checkbox is checked, the ModelBinder will automatically take care of extracting the 'true' from the 'true,false'"
– CodeCaster
May 16 '18 at 10:41
1
@CodeCaster I am wondering now if the model binder in core has that capability?
– Nkosi
May 16 '18 at 10:47
Well I know core likes to break a lot of things, but something as fundamental as a checkbox on a form...?
– CodeCaster
May 16 '18 at 10:54
Yes it seems odd. I will change to a drop down list of enumerated values and see if it works. To try to see if the fault is isolated to the checkbox... As I mentioned, one can navigate the different pages of the checkboxes are left as false. It breaks when one is switched to true...
– Winthorpe
May 16 '18 at 11:08
1
I replaced the checkboxes with drop down lists and the model binding issue was resolved. Which suggests the issue was caused by the ModelBinder with checkboxes. I will leave the question open for a bit to see if anyone can add anything...
– Winthorpe
May 16 '18 at 16:27
add a comment |
This issue was investigated by the aspnet/Mvc team under issue #8043.
There is no problem with the ModelBinder. The problem was caused by my pager code, which constructs the url. Please use the link to view the full conversation which contains a detailed explanation from the aspnet/Mvc team and sample code provided by me.
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%2f50365051%2fcontroller-action-with-multiple-parameters%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
The error message is pretty clear...ShowAll=true,false
is not valid as a Boolean.
The model binder is receiving the following string "true,false"
from the query string for that parameter and would then try to parse that as a Boolean, which would fail as you have already seen.
Similar to trying
bool value = bool.Parse("true,false");
Should work with just ShowAll=true
1
"When the checkbox is checked, the ModelBinder will automatically take care of extracting the 'true' from the 'true,false'"
– CodeCaster
May 16 '18 at 10:41
1
@CodeCaster I am wondering now if the model binder in core has that capability?
– Nkosi
May 16 '18 at 10:47
Well I know core likes to break a lot of things, but something as fundamental as a checkbox on a form...?
– CodeCaster
May 16 '18 at 10:54
Yes it seems odd. I will change to a drop down list of enumerated values and see if it works. To try to see if the fault is isolated to the checkbox... As I mentioned, one can navigate the different pages of the checkboxes are left as false. It breaks when one is switched to true...
– Winthorpe
May 16 '18 at 11:08
1
I replaced the checkboxes with drop down lists and the model binding issue was resolved. Which suggests the issue was caused by the ModelBinder with checkboxes. I will leave the question open for a bit to see if anyone can add anything...
– Winthorpe
May 16 '18 at 16:27
add a comment |
The error message is pretty clear...ShowAll=true,false
is not valid as a Boolean.
The model binder is receiving the following string "true,false"
from the query string for that parameter and would then try to parse that as a Boolean, which would fail as you have already seen.
Similar to trying
bool value = bool.Parse("true,false");
Should work with just ShowAll=true
1
"When the checkbox is checked, the ModelBinder will automatically take care of extracting the 'true' from the 'true,false'"
– CodeCaster
May 16 '18 at 10:41
1
@CodeCaster I am wondering now if the model binder in core has that capability?
– Nkosi
May 16 '18 at 10:47
Well I know core likes to break a lot of things, but something as fundamental as a checkbox on a form...?
– CodeCaster
May 16 '18 at 10:54
Yes it seems odd. I will change to a drop down list of enumerated values and see if it works. To try to see if the fault is isolated to the checkbox... As I mentioned, one can navigate the different pages of the checkboxes are left as false. It breaks when one is switched to true...
– Winthorpe
May 16 '18 at 11:08
1
I replaced the checkboxes with drop down lists and the model binding issue was resolved. Which suggests the issue was caused by the ModelBinder with checkboxes. I will leave the question open for a bit to see if anyone can add anything...
– Winthorpe
May 16 '18 at 16:27
add a comment |
The error message is pretty clear...ShowAll=true,false
is not valid as a Boolean.
The model binder is receiving the following string "true,false"
from the query string for that parameter and would then try to parse that as a Boolean, which would fail as you have already seen.
Similar to trying
bool value = bool.Parse("true,false");
Should work with just ShowAll=true
The error message is pretty clear...ShowAll=true,false
is not valid as a Boolean.
The model binder is receiving the following string "true,false"
from the query string for that parameter and would then try to parse that as a Boolean, which would fail as you have already seen.
Similar to trying
bool value = bool.Parse("true,false");
Should work with just ShowAll=true
edited May 16 '18 at 10:45
answered May 16 '18 at 10:38
NkosiNkosi
116k16130194
116k16130194
1
"When the checkbox is checked, the ModelBinder will automatically take care of extracting the 'true' from the 'true,false'"
– CodeCaster
May 16 '18 at 10:41
1
@CodeCaster I am wondering now if the model binder in core has that capability?
– Nkosi
May 16 '18 at 10:47
Well I know core likes to break a lot of things, but something as fundamental as a checkbox on a form...?
– CodeCaster
May 16 '18 at 10:54
Yes it seems odd. I will change to a drop down list of enumerated values and see if it works. To try to see if the fault is isolated to the checkbox... As I mentioned, one can navigate the different pages of the checkboxes are left as false. It breaks when one is switched to true...
– Winthorpe
May 16 '18 at 11:08
1
I replaced the checkboxes with drop down lists and the model binding issue was resolved. Which suggests the issue was caused by the ModelBinder with checkboxes. I will leave the question open for a bit to see if anyone can add anything...
– Winthorpe
May 16 '18 at 16:27
add a comment |
1
"When the checkbox is checked, the ModelBinder will automatically take care of extracting the 'true' from the 'true,false'"
– CodeCaster
May 16 '18 at 10:41
1
@CodeCaster I am wondering now if the model binder in core has that capability?
– Nkosi
May 16 '18 at 10:47
Well I know core likes to break a lot of things, but something as fundamental as a checkbox on a form...?
– CodeCaster
May 16 '18 at 10:54
Yes it seems odd. I will change to a drop down list of enumerated values and see if it works. To try to see if the fault is isolated to the checkbox... As I mentioned, one can navigate the different pages of the checkboxes are left as false. It breaks when one is switched to true...
– Winthorpe
May 16 '18 at 11:08
1
I replaced the checkboxes with drop down lists and the model binding issue was resolved. Which suggests the issue was caused by the ModelBinder with checkboxes. I will leave the question open for a bit to see if anyone can add anything...
– Winthorpe
May 16 '18 at 16:27
1
1
"When the checkbox is checked, the ModelBinder will automatically take care of extracting the 'true' from the 'true,false'"
– CodeCaster
May 16 '18 at 10:41
"When the checkbox is checked, the ModelBinder will automatically take care of extracting the 'true' from the 'true,false'"
– CodeCaster
May 16 '18 at 10:41
1
1
@CodeCaster I am wondering now if the model binder in core has that capability?
– Nkosi
May 16 '18 at 10:47
@CodeCaster I am wondering now if the model binder in core has that capability?
– Nkosi
May 16 '18 at 10:47
Well I know core likes to break a lot of things, but something as fundamental as a checkbox on a form...?
– CodeCaster
May 16 '18 at 10:54
Well I know core likes to break a lot of things, but something as fundamental as a checkbox on a form...?
– CodeCaster
May 16 '18 at 10:54
Yes it seems odd. I will change to a drop down list of enumerated values and see if it works. To try to see if the fault is isolated to the checkbox... As I mentioned, one can navigate the different pages of the checkboxes are left as false. It breaks when one is switched to true...
– Winthorpe
May 16 '18 at 11:08
Yes it seems odd. I will change to a drop down list of enumerated values and see if it works. To try to see if the fault is isolated to the checkbox... As I mentioned, one can navigate the different pages of the checkboxes are left as false. It breaks when one is switched to true...
– Winthorpe
May 16 '18 at 11:08
1
1
I replaced the checkboxes with drop down lists and the model binding issue was resolved. Which suggests the issue was caused by the ModelBinder with checkboxes. I will leave the question open for a bit to see if anyone can add anything...
– Winthorpe
May 16 '18 at 16:27
I replaced the checkboxes with drop down lists and the model binding issue was resolved. Which suggests the issue was caused by the ModelBinder with checkboxes. I will leave the question open for a bit to see if anyone can add anything...
– Winthorpe
May 16 '18 at 16:27
add a comment |
This issue was investigated by the aspnet/Mvc team under issue #8043.
There is no problem with the ModelBinder. The problem was caused by my pager code, which constructs the url. Please use the link to view the full conversation which contains a detailed explanation from the aspnet/Mvc team and sample code provided by me.
add a comment |
This issue was investigated by the aspnet/Mvc team under issue #8043.
There is no problem with the ModelBinder. The problem was caused by my pager code, which constructs the url. Please use the link to view the full conversation which contains a detailed explanation from the aspnet/Mvc team and sample code provided by me.
add a comment |
This issue was investigated by the aspnet/Mvc team under issue #8043.
There is no problem with the ModelBinder. The problem was caused by my pager code, which constructs the url. Please use the link to view the full conversation which contains a detailed explanation from the aspnet/Mvc team and sample code provided by me.
This issue was investigated by the aspnet/Mvc team under issue #8043.
There is no problem with the ModelBinder. The problem was caused by my pager code, which constructs the url. Please use the link to view the full conversation which contains a detailed explanation from the aspnet/Mvc team and sample code provided by me.
answered Jul 13 '18 at 13:58
WinthorpeWinthorpe
95215
95215
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%2f50365051%2fcontroller-action-with-multiple-parameters%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
The error message is pretty clear...
ShowAll=true,false
is not valid as a boolean. Should work with justShowAll=true
– Nkosi
May 16 '18 at 10:34
Is this a checkbox in a form which is sent through GET?
– CodeCaster
May 16 '18 at 10:41
1
Yes, I am trying to work out why it adding the two Boolean values. When I click the next page button. This happens the ShowAll is toggled to true. Why is it appending the second ‘false’ value in the url?
– Winthorpe
May 16 '18 at 10:43
@CodeCaster. It is a Bootstrap Toggle control. So the same as a checkbox. In a form to a GET
– Winthorpe
May 16 '18 at 10:44