2012-05-08 5 views
1

Im은 Asp.Net MVC3에서 새로 작성되었으며 CKEditor를 사용하려고했습니다. 하지만 입력 한 텍스트를 가져올 수 없으면 제출합니다.CKEditor MVC3에서 텍스트를 가져올 수 없습니다.

내보기 :

<form method=post action="@Url.Action("Description")"> 
    <textarea class="ckeditor" id="editor1" rows="10" name="Details">@Resources.Resources.DescriptionSampleText</textarea> 
    <input type="submit" /> 
</form> 

그리고 거기 컨트롤러 내가 텍스트 필요

[HttpPost] 
public ActionResult Description(string textdetails) 
{ 
    //Doing something with the text 
    return RedirectToAction("Create", "Project", new { text = textdetails}); 
} 

내가 잘못하고있는 중이 야 무엇을?

답변

2

문제에는 세 가지 해결책이 있습니다. 나는 그것을 직접적으로 (두 가지 방법으로) 해결하는 것으로 시작할 것이지만, 제 생각에는 그것이 최선의 방법은 아닙니다. 어쨌든, 그것에 대해 나중에 더.

ASP.NET MVC (3)는 규칙 기반으로 많이 작동합니다. 그것은 마법 같은 방법으로 매개 변수와 다른 요청에 값 등을 할당합니다. 물론 이러한 규칙은 매개 변수의 이름을 기반으로합니다. 당신은 당신의 이름이 일치하는지 확인해야 할 것입니다. (당신이 지금 당장 알 수 있듯이, 이것은 유지하기에 고통 스러울 것입니다).

빠른 해결책은 HttpPost 작업의 매개 변수와 동일한보기의 텍스트 영역 이름을 지정하는 것입니다. 보기 코드는 다음과 같을 것입니다 :

<form method=post action="@Url.Action("Description")"> 
    <textarea class="ckeditor" id="editor1" rows="10" name="Textdetails">@Resources.Resources.DescriptionSampleText</textarea> 
    <input type="submit" /> 
</form> 

이렇게하면됩니다. 참고 : 지금 당장은 직접 테스트하지 않았습니다. 그러나 많은 초보자 가이드도이 작업을 수행하므로 제대로 작동 할 것입니다. 어쨌든, 나는 정말이 솔루션을 좋아하지 않는다. 왜냐하면 그것은 정말 지옥 (리팩토링 등은 매우 쉽지 않을 것이다)이기 때문이다.

두 번째 해결책은 FormCollection을 사용하는 것입니다. 이것을 HttpPost 액션의 매개 변수로 지정하면 인덱스를 통해 값에 액세스 할 수 있습니다. 보기 및 추가 정보를 보려면 다음 SO 게시물을 참조하십시오 : https://stackoverflow.com/a/5088493/578843.

내가 선호하는 마지막 해결책은 ViewModel을 만드는 것입니다. 이 페이지 (http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/examining-the-edit-methods-and-edit-view)를 올바르게 편집하는 법을 읽으시기 바랍니다.

마지막으로, HTML을 콘텐츠로 제출하려는 경우 ASP.NET 보호 지체를 해제하거나 메서드 (또는 클래스)에 주석을 추가해야합니다. 일반적으로 저장 경비를 사용 중지하지 마십시오 (html 등의 입력을 검사합니다), 필요시 주석으로 만 사용 중지하십시오. 작업시 ValidateInput 속성 (MSDN link)을 false로 설정할 수 있습니다. 예 :

[HttpPost] 
[ValidateInput(false)] 
public ActionResult Description(string textdetails) 
{ 
    //Doing something with the text 
    return RedirectToAction("Create", "Project", new { text = textdetails}); 
} 
관련 문제