2013-04-19 2 views
3

나는 오랫동안 googlin이었고, 내가 필요한 것을 찾지 못했습니다. 이것은 우리의 시나리오입니다.데이터베이스에 @ html.actionurl이있는 mvc 면도기

면도날이있는 MVC4 앱이 있습니다. 한 화면에서 Telerik Editor 컨트롤을 사용하여 텍스트와 이미지를 저장합니다. 이들은 HTML 형식으로되어 있으며 데이터베이스에 저장됩니다. 이미지는 byte [] 데이터로 저장되고 html src "path"는 별개의 파일 이름으로 업데이트됩니다.

나중에 사용자가 와서 데이터를 보려고합니다. 모든 이미지가 데이터베이스에 저장되기 때문에 여기서 찾은 예제를 사용할 수 있다고 생각했습니다. Convert Byte Array to Image and Display in Razor View 그리고 Url.Action이있는 태그로 HTML의 태그를 업데이트 한 다음 해당 HTML을 모두 화면에 렌더링합니다. 이미지 태그를 교체 한 후

내 동적으로 생성 된 HTML 코드의 샘플은

<p>testing the image blah</p><p><img src="@Url.Action("getImg", "Responses", new { id = 1 }) " alt="Response Image" /> </p> 

이다하지만 내가 HTML.Raw (텍스트)를 사용하는 경우, 이미지를 처리하지 않습니다. 해당 이미지 태그를보기로 바로 복사하면 멋지게 작동합니다.

제 질문은 뷰에 Razor 구문 코드로 동적으로 생성 된 HTML을 어떻게 적절하게 렌더링 할 수 있습니까?

몇 자세한 내용은 ***********

*************** 자세한 내용은 내가 뭘하는지 명확히 도움이됩니다. Response 및 ResponseImage라는 두 가지 모델이 있습니다.

public class Response : TrackableBase 
{ 
    [Key] 
    public int ResponseId { get; set; } 
    public string Subject{ get; set; } 

    [MaxLength] 
    public string Text { get; set; } 

    public virtual ICollection<ResponseImage> ResponseImages { get; set; } 
} 

공용 클래스 ResponseImage : TrackableBase { [키] 공공 INT의 ResponseImageId {얻을; 세트; }

public int ResponseId { get; set; } 
    [ForeignKey("ResponseId")] 
    public virtual Response Response { get; set; } 

    public string FilePath { get; set; } 
    public string FileName { get; set; } 
    public string FileExtension { get; set; } 
    public byte[] Image {get; set;} 


} 

Response.Text는 Telerik 편집기에서 HTML을 저장합니다. HTMLAgilitypack을 사용하여 HTML의 모든 이미지를 반복하고 ResponseImage 레코드를 만듭니다. ResponseImage.FilePath는 Response.Text에 저장된 HTML 코드로 다시 링크로 사용됩니다 (모든 이미지는 고유 한 이름/경로).

내 Details.cshtml 화면에서 Response.Text의 세부 정보를보고 싶습니다. 나는 데이터베이스에 이미지가 아닌 파일 시스템을 저장하고 있기 때문에 다시 HTMLAgility 팩을 사용하고 면도기와 이미지 태그의 모든 업데이트,

<p>hjjk</p><p> 
<img alt="" height="144" src="/Content/Editor_Images/UserFiles/JKULBIDA/Images/Koala_635019802303066655.jpg" width="164"></p> 

을하지만 : 데이터베이스에서 내 Response.Text은 다음과 같습니다 @ Url.Action을 사용하기위한 구문. 내 새 HTML은 다음과 같습니다.

<p>hjjk</p><p><img src="@Url.Action("getImg", "Responses", new { id = 4 }) " alt="Response Image" /> </p> 

마지막으로 내보기에는 데이터를 표시하고 HTML 형식도 올바르게 지정하고 싶습니다. 난 그래서, 미리 **** 업데이트의 끝 *****

감사를 전 @ Html.Raw (Model.Text)를 호출 내 이미지 태그가 작동하지 않습니다 :(

답변

1

데이터를 저장하는 방법을 잘 모르지만 데이터에 ID와 텍스트가 있다고 가정하고 면도기 구문이 포함 된 문자열을 작성하는 대신 뷰에 모든 문자가 포함되어야합니다. 변수에 데이터가 포함 된 필요한 마크 업을 가져옵니다.당신이 당신의 모델 속성 아이디 및 설명과 함께 이미지했던 부분도이 있다면

예를 들어, 당신의 부분보기의 모습 : 당신이 부분에 개체에 통과 할 때 그런

<img src="@Url.Action("getImg", "Responses", new { id = Model.ID })" 
    alt="@Model.Description"> 

, Razor HTML을 펑키하게 파싱하지 않아도 정상적으로 렌더링됩니다.

편집

나는 당신의 편집을 이해한다면, 당신은 당신이 원하는 무엇으로 img 태그의 src 속성을 변환하는 몇 가지 코드를 실행하고 있습니다. Razor 문자열로 바꾸고 있습니다. 올바른 HTML이 아니기 때문에 나중에보기보다는 나중에 src을 할당 할 때 실제로 이미지의 URL을 빌드하는 것이 좋습니다. 당신이 바로 src 속성에 그 덤프 수

string imageUrl = RouteTable.Routes.GetVirtualPath(
    System.Web.HttpContext.Current.Request.RequestContext, 
    new RouteValueDictionary(new { 
     controller = "Responses", 
     action = "getImg", 
     id = Model.ID 
    })).VirtualPath; 

이것이 할 것입니다 것은, 코드 내부에 매개 변수를 기반으로 MVC URL을 만들 수 있습니다 :

는이를 위해, 나는 이것이 당신이 가야 것으로 예상 . 이상한 라우팅이나 그와 비슷한 것을 다루는 경우이 설정을 약간 조정해야 할 수도 있습니다. 그러나 기본 설정에서 작동해야합니다.

컨트롤러가있는 경우 고정 전류를 사용하는 대신 ControllerContext.RequestContext 또는 심지어 ControllerContext을 수행 할 수 있다고 생각합니다.

+0

답장을 보내 주셔서 감사합니다. 내 전체 프로세스에 대한 정보를 추가했습니다. 난 그냥 내 이미지 태그를 렌더링하는 부분보기를 사용하는 것이 좋습니다 생각, 난 여전히 같은 문제가 HTML 내부에서 @ Html.Partial 호출하려고하지 않을까 궁금하네요. Raw? 아니면 궁극적으로 HTML/Razor 믹스 백을 렌더링하는 더 좋은 방법이 있습니까? – superservo15

+0

부분보기는 이미지 객체를 모델로 가질 수 있었지만 기본보기에서 속성이나 변수를 사용하여 동일한 작업을 수행 할 수있었습니다. HTMLAgility가 어떻게 작동하는지 모르겠으므로 거기서 도울 수 없습니다.하지만 당신이하는 일에 따라, 문자열을'Html.Raw'에 전달합니다. 그래서 면도기처럼 보입니다. 일반 텍스트로 취급되며 실행되지 않습니다. 편집을 참조하십시오. 이제 내가하는 일을 볼 때 더 나은 대답을 얻을 수 있습니다. –

+0

물론 이것은 의미가 있습니다 :) 이제는 매력처럼 작동하고 전체 img 태그 대신 src 값만 바꾸면 HTML 형식의 크기 및 크기가 유지됩니다. 금! 나는 Routing이 나의 레이다조차도 아니기 때문에 MVC에 아직 익숙하지 않다. 그러나 그것은 지금있다 :) soooo 많이! – superservo15