URL.Action includes id when constructing URL
I'm using ASP.Net MVC. Here's my code snippets from a controller named Course:
public ActionResult List(int id)
{
var viewmodel.ShowUrl = Url.Action("Show", "Course");
...
}
public ActionResult Show(int id)
{
...
}
viewmodel.ShowUrl picks up whatever the value is of the "id" parameter. So viewmodel.ShowUrl becomes "/Course/Show/151" (value of id is 151); I want to be able to set the id part on the client based on user interaction. I want the value of viewmodel.ShowUrl to be "/Course/Show".
This seems like a bug to me. I'm not telling Url.Action to include an id value. It's doing it on its own. If I want to set the id value then I would do something like this:
var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue});
So, how do you prevent MVC from adding the id value? I can hardcode viewmodel.ShowUrl to "/Course/Show" but that seems to be a kludgy solution. Thanks.
asp.net-mvc-3 asp.net-mvc-routing url.action
add a comment |
I'm using ASP.Net MVC. Here's my code snippets from a controller named Course:
public ActionResult List(int id)
{
var viewmodel.ShowUrl = Url.Action("Show", "Course");
...
}
public ActionResult Show(int id)
{
...
}
viewmodel.ShowUrl picks up whatever the value is of the "id" parameter. So viewmodel.ShowUrl becomes "/Course/Show/151" (value of id is 151); I want to be able to set the id part on the client based on user interaction. I want the value of viewmodel.ShowUrl to be "/Course/Show".
This seems like a bug to me. I'm not telling Url.Action to include an id value. It's doing it on its own. If I want to set the id value then I would do something like this:
var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue});
So, how do you prevent MVC from adding the id value? I can hardcode viewmodel.ShowUrl to "/Course/Show" but that seems to be a kludgy solution. Thanks.
asp.net-mvc-3 asp.net-mvc-routing url.action
I cant remeber exactly but theRoutedatais onViewDataand that's why it's passed. I think you can doUrl.Action("Show", "Course", new {});or empty theRouteDataonViewDataobject.
– Bart Calixto
Aug 12 '13 at 17:15
add a comment |
I'm using ASP.Net MVC. Here's my code snippets from a controller named Course:
public ActionResult List(int id)
{
var viewmodel.ShowUrl = Url.Action("Show", "Course");
...
}
public ActionResult Show(int id)
{
...
}
viewmodel.ShowUrl picks up whatever the value is of the "id" parameter. So viewmodel.ShowUrl becomes "/Course/Show/151" (value of id is 151); I want to be able to set the id part on the client based on user interaction. I want the value of viewmodel.ShowUrl to be "/Course/Show".
This seems like a bug to me. I'm not telling Url.Action to include an id value. It's doing it on its own. If I want to set the id value then I would do something like this:
var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue});
So, how do you prevent MVC from adding the id value? I can hardcode viewmodel.ShowUrl to "/Course/Show" but that seems to be a kludgy solution. Thanks.
asp.net-mvc-3 asp.net-mvc-routing url.action
I'm using ASP.Net MVC. Here's my code snippets from a controller named Course:
public ActionResult List(int id)
{
var viewmodel.ShowUrl = Url.Action("Show", "Course");
...
}
public ActionResult Show(int id)
{
...
}
viewmodel.ShowUrl picks up whatever the value is of the "id" parameter. So viewmodel.ShowUrl becomes "/Course/Show/151" (value of id is 151); I want to be able to set the id part on the client based on user interaction. I want the value of viewmodel.ShowUrl to be "/Course/Show".
This seems like a bug to me. I'm not telling Url.Action to include an id value. It's doing it on its own. If I want to set the id value then I would do something like this:
var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue});
So, how do you prevent MVC from adding the id value? I can hardcode viewmodel.ShowUrl to "/Course/Show" but that seems to be a kludgy solution. Thanks.
asp.net-mvc-3 asp.net-mvc-routing url.action
asp.net-mvc-3 asp.net-mvc-routing url.action
asked Apr 17 '12 at 22:23
Tom Schreck
1,7251047101
1,7251047101
I cant remeber exactly but theRoutedatais onViewDataand that's why it's passed. I think you can doUrl.Action("Show", "Course", new {});or empty theRouteDataonViewDataobject.
– Bart Calixto
Aug 12 '13 at 17:15
add a comment |
I cant remeber exactly but theRoutedatais onViewDataand that's why it's passed. I think you can doUrl.Action("Show", "Course", new {});or empty theRouteDataonViewDataobject.
– Bart Calixto
Aug 12 '13 at 17:15
I cant remeber exactly but the
Routedata is on ViewData and that's why it's passed. I think you can do Url.Action("Show", "Course", new {}); or empty the RouteData on ViewData object.– Bart Calixto
Aug 12 '13 at 17:15
I cant remeber exactly but the
Routedata is on ViewData and that's why it's passed. I think you can do Url.Action("Show", "Course", new {}); or empty the RouteData on ViewData object.– Bart Calixto
Aug 12 '13 at 17:15
add a comment |
3 Answers
3
active
oldest
votes
I'm guessing in your routing, you're not specifying that id is an optional parameter. Here's the default route in a sample project.
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults
);
Note the inclusion of id = UrlParameter.Optional. Without that, you'd get the behavior you're describing because it thinks the id is mandatory.
On a side note, if your Show action doesn't always have an id then it should be nullable or provide a default.
public ActionResult Show(int? id)
public ActionResult Show(int id = 0)
Otherwise you'll get an error when you try loading the url without the id parameter.
add a comment |
Just came across the same problem and so you know, you can also just use an empty string:
@Url.Action("Show", "Course", new { id = "" })
Thanks @Ben. This is the only one that worked for me.
– JRodd
Aug 31 at 19:45
add a comment |
I know this is old, but I found this first, but didn't like any of these solutions, so I kept looking and found https://stackoverflow.com/a/19110921/1130636.
You can use UrlParameter.Optional to solve this problem
Url.Action("Show", "Course", new { id = UrlParameter.Optional })
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%2f10200078%2furl-action-includes-id-when-constructing-url%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
I'm guessing in your routing, you're not specifying that id is an optional parameter. Here's the default route in a sample project.
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults
);
Note the inclusion of id = UrlParameter.Optional. Without that, you'd get the behavior you're describing because it thinks the id is mandatory.
On a side note, if your Show action doesn't always have an id then it should be nullable or provide a default.
public ActionResult Show(int? id)
public ActionResult Show(int id = 0)
Otherwise you'll get an error when you try loading the url without the id parameter.
add a comment |
I'm guessing in your routing, you're not specifying that id is an optional parameter. Here's the default route in a sample project.
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults
);
Note the inclusion of id = UrlParameter.Optional. Without that, you'd get the behavior you're describing because it thinks the id is mandatory.
On a side note, if your Show action doesn't always have an id then it should be nullable or provide a default.
public ActionResult Show(int? id)
public ActionResult Show(int id = 0)
Otherwise you'll get an error when you try loading the url without the id parameter.
add a comment |
I'm guessing in your routing, you're not specifying that id is an optional parameter. Here's the default route in a sample project.
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults
);
Note the inclusion of id = UrlParameter.Optional. Without that, you'd get the behavior you're describing because it thinks the id is mandatory.
On a side note, if your Show action doesn't always have an id then it should be nullable or provide a default.
public ActionResult Show(int? id)
public ActionResult Show(int id = 0)
Otherwise you'll get an error when you try loading the url without the id parameter.
I'm guessing in your routing, you're not specifying that id is an optional parameter. Here's the default route in a sample project.
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults
);
Note the inclusion of id = UrlParameter.Optional. Without that, you'd get the behavior you're describing because it thinks the id is mandatory.
On a side note, if your Show action doesn't always have an id then it should be nullable or provide a default.
public ActionResult Show(int? id)
public ActionResult Show(int id = 0)
Otherwise you'll get an error when you try loading the url without the id parameter.
answered Apr 18 '12 at 0:07
DMulligan
6,20032331
6,20032331
add a comment |
add a comment |
Just came across the same problem and so you know, you can also just use an empty string:
@Url.Action("Show", "Course", new { id = "" })
Thanks @Ben. This is the only one that worked for me.
– JRodd
Aug 31 at 19:45
add a comment |
Just came across the same problem and so you know, you can also just use an empty string:
@Url.Action("Show", "Course", new { id = "" })
Thanks @Ben. This is the only one that worked for me.
– JRodd
Aug 31 at 19:45
add a comment |
Just came across the same problem and so you know, you can also just use an empty string:
@Url.Action("Show", "Course", new { id = "" })
Just came across the same problem and so you know, you can also just use an empty string:
@Url.Action("Show", "Course", new { id = "" })
answered Jul 9 '14 at 6:59
Ben Cull
7,88653235
7,88653235
Thanks @Ben. This is the only one that worked for me.
– JRodd
Aug 31 at 19:45
add a comment |
Thanks @Ben. This is the only one that worked for me.
– JRodd
Aug 31 at 19:45
Thanks @Ben. This is the only one that worked for me.
– JRodd
Aug 31 at 19:45
Thanks @Ben. This is the only one that worked for me.
– JRodd
Aug 31 at 19:45
add a comment |
I know this is old, but I found this first, but didn't like any of these solutions, so I kept looking and found https://stackoverflow.com/a/19110921/1130636.
You can use UrlParameter.Optional to solve this problem
Url.Action("Show", "Course", new { id = UrlParameter.Optional })
add a comment |
I know this is old, but I found this first, but didn't like any of these solutions, so I kept looking and found https://stackoverflow.com/a/19110921/1130636.
You can use UrlParameter.Optional to solve this problem
Url.Action("Show", "Course", new { id = UrlParameter.Optional })
add a comment |
I know this is old, but I found this first, but didn't like any of these solutions, so I kept looking and found https://stackoverflow.com/a/19110921/1130636.
You can use UrlParameter.Optional to solve this problem
Url.Action("Show", "Course", new { id = UrlParameter.Optional })
I know this is old, but I found this first, but didn't like any of these solutions, so I kept looking and found https://stackoverflow.com/a/19110921/1130636.
You can use UrlParameter.Optional to solve this problem
Url.Action("Show", "Course", new { id = UrlParameter.Optional })
edited May 23 '17 at 12:17
Community♦
11
11
answered Mar 13 '15 at 17:01
borigas
33747
33747
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2f10200078%2furl-action-includes-id-when-constructing-url%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
I cant remeber exactly but the
Routedatais onViewDataand that's why it's passed. I think you can doUrl.Action("Show", "Course", new {});or empty theRouteDataonViewDataobject.– Bart Calixto
Aug 12 '13 at 17:15