如何在ASP.NETMVC中传递字符串作为参数
在本例中,我试图制作一个在URL中传递如何在ASP.NETMVC中传递字符串作为参数,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,在本例中,我试图制作一个在URL中传递string参数的简单示例,不使用queryString。首先,我在RouteConfig.cs文件中添加了一个新的MapRoute,作为 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Hom
string
参数的简单示例,不使用queryString
。首先,我在RouteConfig.cs
文件中添加了一个新的MapRoute
,作为
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "app",
url: "{controller}/{action}/{name}"
);
在控制器中,我有
public class AppController : Controller
{
public string Index(string name)
{
return HttpUtility.HtmlEncode("Hello " + name );
}
}
但是视图没有显示字符串参数。例如,像这样的URLhttp://localhost:59013/App/Index/Ali
仅返回你好
为什么会这样
更新
首先,您需要更改已注册路由的顺序,以便默认为最后一个 其次,你的
应用程序路线模式是错误的,并且总是与默认路线冲突。你最好把它的样式改成
url: "App/Index/{name}"
或者是对更友好的人
url: "App/{name}"
都有
defaults: new { controller = "App", action = "Index" }
因此,您的路线将如下所示:
routes.MapRoute(
name: "app",
url: "App/{name}",
defaults: new { controller = "App", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
请参见更改已注册路线的顺序。默认值必须是最后一个。但是,您的应用程序
路线模式是错误的,并且将始终与默认路线冲突。您最好将其模式更改为url:“App/Index/{name}”
(或者更改为更友好的url:“App/{name}”
),这两种模式都具有默认值:new{controller=“App”,action=“Index”}
。谢谢Haim770,您更改自定义路由优先级的做法是正确的,解决了这个问题,但是我如何摆脱url中的\index
?我已经添加了defaults:new{action=“Index”}
,但是当我尝试类似http://localhost:59013/App/Ali/
请将修改后的路线添加到问题中。您可以检查更新吗?请查看我的答案。您缺少controller=“App”
部分。@MonaCoder,您的路线与答案中的路线完全一样吗?您正在尝试的Url是什么?我在“/”应用程序中遇到服务器错误。
错误我修改了默认值,但仍然无法在没有index@MonaCoder,错误说明了什么?Url是什么?我知道我已经修好了,但这不是有点特别吗?我的意思是,假设我有另一个名为MapControoler
的控制器,那么我也必须为此编写相同的MapRoute()
?有没有办法让它更通用?@MonaCoder,您已经通过默认路径拥有了“通用”功能,可以使用{controller}/{action}
模式实现任何操作。一旦您需要在最后一段({name}
而不是{id}
)中使用不同的参数名来实现特定的操作,框架必须能够区分它们,这将意味着对更特定的操作有一个独特的Url模式。但是,是否有基于参数索引而不是名称的解决方案值得一看(您始终可以使用查询字符串:/App/index?name=…
)。
routes.MapRoute(
name: "app",
url: "App/{name}",
defaults: new { controller = "App", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);