2010-05-19 1 views
4

ASP.NET에서 메시징 웹 응용 프로그램을 만들고 메시지를 보내려는 사용자에게 오류 메시지를 표시 할 때 문제가 발생합니다. 잘못된.ASP.NET MVC : 쿼리 문자열이 손상되지 않은 뷰 반환

사용자는 사람들의 프로필을보고 '메시지 보내기'를 클릭 할 수 있습니다. 다음 조치를 (? URL이/메시지/= 사용자 이름으로 생성된다)라고하고 그들에게 자신의 메시지를 입력하고 보낼 수있는 페이지가 표시되어 표시되는 페이지에서

public ActionResult Create(string to) 
{ 
    ViewData["recipientUsername"] = to; 

    return View(); 
} 

를, 사용자 이름을 입력 에서 숨겨진 입력 필드로 이동합니다. 사용자가 클릭 '전송'하는 경우 :

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(FormCollection collection, string message) 
{ 
    try 
    { 
     //do message stuff that errors out 
    } 
    catch 
    { 
     ModelState.AddModelErrors(message.GetRuleViolations()); //adding errors to modelstate 
    } 

    return View(); 
} 

이 이제 오류 메시지가 사용자의 벌금 표시됩니다, 그러나 URL은 더 이상 쿼리 문자열 (/ 메시지/생성)이 없다고에서 변경됩니다. 다시 말하지만, 사용자가 새로 고침 버튼을 클릭 할 때 Create 액션의 페이지 오류가 더 이상 'to'매개 변수를 갖지 않는다는 점을 제외하고는 괜찮습니다.

그래서 나는 어떻게 든 내 쿼리를 유지할 필요가 있다고 생각합니다. 이 작업을 수행 할 수있는 방법이 있습니까? 아니면 다른 방법을 모두 사용해야합니까?

+1

Create 메소드가'to string '을 취했기 때문에 View to를 반환 할 때 여전히 URL에 쿼리 문자열이나 라우팅 규칙이있는 곳을 설정합니다. 일단 당신이'return View()'를 호출하면 Url은 더 이상 쿼리 문자열에 "to"를 포함하지 않는다고 말하는 것입니까? –

+0

흠 ... 내 질문에 방금 대답했을 것 같아. 위의 작업을 단순화 할 때 방금 작성 후 작업에 매개 변수로 추가했습니다. 실제 코드를 표시하도록 업데이트했습니다. 컬렉션 [ 'recipientUsername']을 사용하여 수신자를받습니다. 이것을 생성 동작의 매개 변수로 변경하면 수정됩니까? 그렇다면 대답을 쓸어 넘기면 나는 그것을 표시 할 것입니다. (또한, 예 - url에 더 이상 쿼리 문자열에 'to'가 포함되지 않습니다.) – ajbeaven

답변

3

나는

<% Html.BeginForm("Create", "Controller") { %> 

<% } %> 

당신이 라우팅을 통해 양식의 작업 URL을 만들으로는, 기존의 경로 값이 과정에서 손실됩니다 ... 당신이 뭔가를하고있는 가정합니다. 이것을 피하는 가장 쉬운 방법은 귀하가 게시하는 페이지에 있기 때문에 매개 변수없는 버전 BeginForm을 사용하는 것입니다.

<% Html.BeginForm() { %> 

<% } %> 

이것은 현재 URL, 쿼리 문자열 및 모두를 양식의 ACTION으로 사용합니다. 그렇지 않은 경우 BeginForm 과부하 경로 값 to을 전달해야합니다.

+0

전설, 그게 정확히 내가 한 것입니다. 고마워. – ajbeaven

관련 문제