ASP.net MVC 응용 프로그램을 만들고 싶습니다. 사용자가 링크를 클릭하면 ajax 호출을 수행하여 컨트롤러에 데이터를 보낸 다음 다른 데이터를 다시보기로 반환합니다.
이것은 컨트롤러에서 호출하고 싶은 방법입니다.
public JsonResult GetImage(string url)
{
Image image = Image.FromFile(url, true);
byte[] byteImage = converter.ImageToBytes(image);
return Json(new { byteImage }, JsonRequestBehavior.AllowGet);
}
다음은 컨트롤러 위치입니다.
08983ClassLibrary\EpostASP\Controllers\CustomerController.cs
이것은 내 Ajax 호출입니다.
$.ajax({
url: "~/Controllers/CustomerController/GetImage/",
type: 'POST',
contentType: 'application/json',
data: "url="+url,
success: function (image) {
document.getElementById("image").src = "data:image/png;base64," + image;
showImage();
}
});
코드에 중단 점을 배치하면 ajax 호출을 밟은 다음 컨트롤러에 도달하지 않고 오류가 발생하지 않는 것을 볼 수 있습니다. 어떤 아이디어?
주요 문제는 여기에 있습니다.
url: "~/Controllers/CustomerController/GetImage/",
당신은 볼 ~
당신이 ASP.net 서버 측 경로에이를 사용할 때, 그것은 현재의 서버 응용 프로그램 폴더 위치로 대체됩니다, 즉, 서버 측 문자입니다. 이것은 전통적인 ASP.Net 방식이었습니다. 이 줄에는 2 개의 오류가 있습니다.
이 URL은 작동하지 않습니다. JS의 문자열 내부에 있으므로 ASP.net은 서버 경로로 대체해야한다는 것을 알지 못합니다. 이제 두 번째 오류가 발생합니다. ASP.net이이를 감지하고 변환 할 수 있어도 여전히 작동하지 않습니다. 내가 2에서 설명한 요점 때문에-
ASP.net MVC를 사용하고 있기 때문에 좋은 방법이 아닙니다. 보다 일반적인 MVC 방법은 경로를 만들고 해당 경로를 사용하는 것입니다. ASP.net에서는 페이지 (.aspx, .ascx)에 직접 링크 할 수있는 옵션이 있기 때문입니다. 그러나 MVC 컨트롤러 작업은 그렇게 연결할 수 없습니다. 따라서 경로 구성에서 경로를 Global.asax
만든 다음 (확인 ) 해당 경로를 여기에서 URL로 사용해야합니다. 기본적으로 MVC 앱은 다음 형식을 지원합니다.
<host>/{controller}/action
예 -
'localhost/Home/Index`
HomeController
기본적으로 컨트롤러는 후행 문자열을 무시해야하기 때문에 작성하지 않았습니다 Controller
.
나는 이것이 도움이 되었기를 바라며 현재 상황에 대한 해결책을 찾고 있다면 이것을 시도해보십시오 (테스트하지는 않았지만 다음과 같아야합니다)-
$.ajax({
url: "Customer/GetImage",
type: 'POST',
contentType: 'application/json',
data: "url="+url,
success: function (image) {
document.getElementById("image").src = "data:image/png;base64," + image;
showImage();
}
});
하지만 안전한 편이 되려면 다음을 사용해야합니다.
[HttpPost]
public JsonResult GetImage(string url)
{
}
업데이트 : maproute (코멘트에서 요청한대로)는 이러한 경로 중 하나에서 작동합니다. 그러나 다른 경로 구성으로도 작동 할 수 있습니다. 라우트 구성은 매우 유연하며, 작동하는 방식으로 라우트를 설정하는 것입니다. -
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
"...", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute(
"...", // Route name
"{controller}/{action}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute(
"...", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Customer", action = "GetImage", id = "" } // Parameter defaults
);
routes.MapRoute(
"...", // Route name
"Customer/GetImage/{id}", // URL with parameters
new { controller = "Customer", action = "GetImage", id = "" } // Parameter defaults
);
..... //all of these mentioned route will land on the same url
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다