2012-12-03 3 views
1

ASP.NET MVC (MVC3)의 첫 프로젝트이고 모든 것을 처리하는 데 많은 어려움을 겪고 있습니다. 선택한 언어에 따라 페이지의 모든 텍스트가 데이터베이스에서 선택됩니다. 이 언어 선택을 위해 저는 Session 변수를 사용하기를 원했습니다. 나는 이미지 링크을 언어에 필요로하므로 다음 행을 .cshtml 페이지에 썼습니다. Asp.NET MVC3 불량 요청

@using (Html.BeginForm()) { 
    <a href='<%: Url.Action("Index", "Home", new { lang="Tr" }) %>'> 
     <img src="../../Content/Images/flag_tr.jpg" width="40" height="20" /> 
    </a> 
    <a href='<%: Url.Action("Index", "Home", new { lang = "En" }) %>'> 
     <img src="../../Content/Images/flag_en.jpg" width="40" height="20" /> 
    </a> 
} 

그리고 HomeController에서

:

public ActionResult Index() 

     ViewBag.Message = "Welcome to ASP.NET MVC!"; 
     ViewBag.Selected = "Not yet selected"; 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Index(String lang) 
    { 
     if (lang == "Tr") 
     { 
      System.Web.HttpContext.Current.Session["Language"] = "Tr"; 
     } 
     else if (lang == "En") 
     { 
      System.Web.HttpContext.Current.Session["Language"] = "En"; 
     } 
     ViewBag.Selected = System.Web.HttpContext.Current.Session["Language"]; 
     return View(); 
    } 

내가 얻을 플래그 링크를 클릭하면 "HTTP 오류 400 - 잘못된 요청." 아무도 내가 잘못하고있는 일이나 내가해야 할 일을 말해 줄 수 있습니까?

피씨 : 나는 폼없이 새로운 기능을 컨트롤러 Lang에 추가하고 거기에서 인덱스로 리디렉션했지만 성공하지는 못했습니다.

답변

1

Razor 및 WebForms 구문을 혼합 한 것처럼 보입니다.

<a href='<%: Url.Action("Index", "Home", new { lang="Tr" }) %>'> 

가 있어야한다 : 당신 페이지의 "소스보기"가, 나는 확신 할 때 당신은 당신의 앵커에 올바른 URL을 볼 수 없습니다 또한

<a href='@Url.Action("Index", "Home", new { lang="Tr" })'> 

, 앵커는 HTTPGET 원인이 있습니다, 양식으로도 JavaScript의 동작을 재정의하거나 컨트롤러 동작의 HTTPGET 버전에 lang 검사를 추가해야합니다. 하나에 당신이 컨트롤러 액션을 결합, 이런 식으로 뭔가를 시도 : 당신이 [HttpGet] 또는 [HttpPost]로이 장식하지 않는 경우

public ActionResult Index(string lang) 
{ 
    if (lang == "Tr") 
    { 
     System.Web.HttpContext.Current.Session["Language"] = "Tr"; 
    } 
    else if (lang == "En") 
    { 
     System.Web.HttpContext.Current.Session["Language"] = "En"; 
    } 

    ViewBag.Message = "Welcome to ASP.NET MVC!"; 
    ViewBag.Selected = System.Web.HttpContext.Current.Session["Language"] ?? "Not yet selected"; 
    return View(); 
} 

다음 어떤 HTTP 동사가이 작업에 매핑됩니다.

+0

정말 고마워요!HttpGet 정보; HttpPost 대신 HttpGet을 배치 했으므로 Tr 및 Eng을 출력으로 얻을 수 있지만 지금은 원래의 Index() 기능을 사용할 수 없습니다. 지식이 부족해서 죄송합니다. C#을 처음 접했을 때 Java의 @Override 형식으로 [HttpGet]을 여기에 사용할 수 있습니까? –

+0

예제 컨트롤러 동작에 대한 내 편집을 참조하십시오. 'Session'과는 아무 관련이 없으므로 질문의 제목도 편집 할 것입니다. –

-1

내가 틀리지 않다면 HomeController 클래스 이름은 HomeController입니다.

<a href='<%: Url.Action("Index", "HomeController", new { lang="Tr" }) %>'> 
    <img src="../../Content/Images/flag_tr.jpg" width="40" height="20" /> 
</a> 

그래서 당신이 Url.Action에서 컨트롤러를 지정하는 경우, 그것은 단지 하지 HomeController해야한다.

그래서보기에서 코드는 다음과 같이 될 것입니다 :

@using (Html.BeginForm()) { 
    <a href='<%: Url.Action("Index", "Home", new { lang="Tr" }) %>'> 
     <img src="../../Content/Images/flag_tr.jpg" width="40" height="20" /> 
    </a> 
    <a href='<%: Url.Action("Index", "Home", new { lang = "En" }) %>'> 
     <img src="../../Content/Images/flag_en.jpg" width="40" height="20" /> 
    </a> 
} 

이 당신을 위해 작동 또는 더 많은 설명이 필요한 경우 알려주세요. 감사합니다

+1

감사하지만, 나는 대답 앞에서 질문을 인식/편집했습니다. –

+0

이것은 면도기 나 WebForms 문법이 아닌 유효한 합병입니다. –

-1

나는 가 [http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx]는 특별한 사용을위한 당신에게 아이디어를 줄 수있는 오류에 대한 이유가 어쩌면 URL이, 스콧 Hanselman은에 의해이 문서를 확인 믿는다 URL은 입니다.

+3

URL에 "위험한"문자를 넣지 않습니까? –