라우팅 : 현재 작업 요청 […]이 다음 작업 방법간에 모호합니다.
Browse.chtml
사용자가 검색어를 입력하거나 검색어를 비워 둘 수 있는보기가 있습니다. 검색어를 입력 할 때 페이지를로 연결 http://localhost:62019/Gallery/Browse/{Searchterm}
하고, 아무것도 입력하지 않은 경우 브라우저를로 연결하고 싶습니다 http://localhost:62019/Gallery/Browse/Start/Here
.
이것을 시도하면 오류가 발생합니다.
컨트롤러 유형 'GalleryController'의 'Browse'작업에 대한 현재 요청은 다음 작업 메서드간에 모호합니다. System.Web.Mvc.ActionResult Browse (System.String) on type AutoApp_MVC.Controllers.GalleryController System.Web.Mvc.ActionResult Browse (Int32, System.String) AutoApp_MVC.Controllers.GalleryController 형식
내가 MVC로하는 모든 일은 처음입니다. 이 시점에서 무엇을 시도해야할지 잘 모르겠습니다.
public ActionResult Browse(string id)
{
var summaries = /* search using id as search term */
return View(summaries);
}
public ActionResult Browse(string name1, string name2)
{
var summaries = /* default list when nothing entered */
return View(summaries);
}
Global.asax.cs에도 다음이 있습니다.
routes.MapRoute(
"StartBrowse",
"Gallery/Browse/{s1}/{s2}",
new
{
controller = "Gallery",
action = "Browse",
s1 = UrlParameter.Optional,
s2 = UrlParameter.Optional
});
routes.MapRoute(
"ActualBrowse",
"Gallery/Browse/{searchterm}",
new
{
controller = "Gallery",
action = "Browse",
searchterm=UrlParameter.Optional
});
컨트롤러에서 이름이 같은 작업 메서드는 최대 2 개까지만 가질 수 있습니다. 이렇게하려면 1 개는이어야 [HttpPost]
하고 다른 하나는이어야합니다 [HttpGet]
.
두 메서드 모두 GET이므로 작업 메서드 중 하나의 이름을 바꾸거나 다른 컨트롤러로 이동해야합니다.
2 개의 Browse 메서드가 유효한 C # 오버로드이지만 MVC 작업 메서드 선택기는 호출 할 메서드를 파악할 수 없습니다. 방법에 대한 경로를 일치 시키려고 시도 할 것이며 (또는 그 반대로)이 알고리즘은 강력한 유형이 아닙니다.
다른 작업 방법을 가리키는 사용자 지정 경로를 사용하여 원하는 작업을 수행 할 수 있습니다.
... Global.asax에서
routes.MapRoute( // this route must be declared first, before the one below it
"StartBrowse",
"Gallery/Browse/Start/Here",
new
{
controller = "Gallery",
action = "StartBrowse",
});
routes.MapRoute(
"ActualBrowse",
"Gallery/Browse/{searchterm}",
new
{
controller = "Gallery",
action = "Browse",
searchterm = UrlParameter.Optional
});
... 컨트롤러에서 ...
public ActionResult Browse(string id)
{
var summaries = /* search using id as search term */
return View(summaries);
}
public ActionResult StartBrowse()
{
var summaries = /* default list when nothing entered */
return View(summaries);
}
You might also be able to keep the action methods named the same in the controller, by applying an [ActionName]
attribute to one to distinguish it. Using the same Global.asax as above, your controller would then look like this:
public ActionResult Browse(string id)
{
var summaries = /* search using id as search term */
return View(summaries);
}
[ActionName("StartBrowse")]
public ActionResult Browse()
{
var summaries = /* default list when nothing entered */
return View(summaries);
}
I don't know when the question was asked this solution was available but you can use:
Request.QueryString["key"]
So this should work fine for your problem:
[HttpGet]
public ActionResult Browse()
{
if( Request.QueryString["id"] != null )
var summaries = /* search using id as search term */
else /*assuming you don't have any more option*/
var summaries = /* default list when nothing entered */
return View(summaries);
}
Add following code in RouteConfig.cs before Default route
routes.MapMvcAttributeRoutes();
And add route attributes in the controller like:
[Route("Cars/deteals/{id:int}")]
public ContentResult deteals(int id)
{
return Content("<b>Cars ID Is " + id + "</b>");
}
[Route("Cars/deteals/{name}")]
public ContentResult deteals(string name)
{
return Content("<b>Car name Is " + name + "</b>");
}
I think the point being made is that you don't need to implicitly test for querystring parameters using the request class.
MVC does the mapping for you (unless you have made severe changes in your MVC routes).
Thus an actionlink path of
/umbraco/Surface/LoginSurface/Logout?DestinationUrl=/home/
would automatically be available to your (surface) controller with the parameter defined:
public ActionResult Logout(string DestinationUrl)
MVC does the work.
'developer tip' 카테고리의 다른 글
JavaScript, null / undefined [duplicate]에 대한 중첩 된 개체 속성을 확인하는 우아한 방법 (0) | 2020.09.01 |
---|---|
Erlang의 99.9999999 % (나인 나인) 신뢰성 (0) | 2020.09.01 |
0과 -0을 구별 할 수 있습니까? (0) | 2020.09.01 |
Facebook 애플리케이션 ID와 비밀 키는 어디에서 찾을 수 있습니까? (0) | 2020.09.01 |
사적인 방법은 정말 안전합니까? (0) | 2020.09.01 |