2009-04-16 8 views
0

jvGrid [XML]로 일부 하드 렌더링 된 테이블을 대체 할 Mvc 앱이 있습니다.ASP.NET MVC + jqGrid 내장 된 링크 모범 사례

문제점 행에 특정 작업을 수행하기 위해 작업 열 링크 중 하나에 작업 링크가 있습니다. 내 XML에 CDATA 태그를 사용하여 복제했습니다. 그러나 문제는 이제이 태그가 액션 메소드에서 생성되어 모든 HTML이 (TagBuilder의) 컨트롤러에 있고 이것이 분명히 좋지 않다는 것입니다.

RenderPartialExtensions를 살펴 보았으나이를 위해 HtmlHelper 인스턴스가 필요하며 더하기 뷰 엔진을 사용하므로 작동 여부를 확신 할 수도 없습니다.

다른 사람들이 어떻게 처리 했습니까?
html과 같은 실제 xml을 렌더링하는 뷰를 만들 수 있지만 각 xml 데이터 소스에 대한 뷰를 만들어야하고 이미 그 뷰를 만들 필요가 있다고 생각합니다.

입력 해 주셔서 감사합니다.

답변

0

아키텍처의 이상을 명확히하고, 어떻게 그것을 해결 끝났다.

  1. 사업은 VB의 XML 어셈블리가 다루는 비즈니스 오브젝트를 직렬화 처리
  2. VB XML 드/직렬화 라이브러리
  3. ASP.NET MVC 프로젝트

개체 : 나는 다음과 같은 프로젝트/어셈블리를 비즈니스 (# 1) 모델 만. 그래서 난 것 출력이 같은 XElement를 뭔가 :

<invoice> 
    <invoiceId>1234</invoiceId> 
    <customer>Hudsucker Industries</customer> 
    <otherBusinessData>etc, etc</otherBusinessData> 
</invoice> 
문제는 내가있는 jqGrid를 사용하고 내가 같은 것을 필요 그래서 특정 작업에 대한 각 송장에 요소를 추가 할 필요가 발생

:

<invoice> 
    <actionHtml><![CDATA[ ...some HTML such as links... ]]></actionHtml> 
    <invoiceId>1234</invoiceId> 
    <customer>Hudsucker Industries</customer> 
    <otherBusinessData>etc, etc</otherBusinessData> 
</invoice> 

을 나는 그것을 작동시키지 만 컨트롤러의 모든 action HTML을 생성해야하는데 분명히 좋은 분리가 아니며 모든 HtmlHelper 메소드 등을 잃어 버렸다. 그래서 내가 '올바른'방법을 해결 결국 방법은 다음과 같습니다

  1. 는 웹폼보기를 (내 페이지에 대한 brail 뷰를 사용)를 사용하여 [그래서 나는 XML로 설정하는 ContentType이 페이지 속성을 사용할 수 있습니다].
  2. 원시 비즈니스 오브젝트의 컬렉션을 모델 데이터로 전달하십시오.
  3. 루프 모델 수집, 나는 단순히 내 VB의 XML 라이브러리를 호출하고, 할 수있는 출력하려면
  4. 실제 비즈니스 요소를 (따라서 내 Html 헬퍼 방법을 얻는 등) 뷰에있는 각 송장에 대한 actonHtml 요소를 구축 : invoice.ToXml().Elements().ToString() 및 나는 좋다.

더 많은 정보를 재사용 할 수 있도록 jqGrid 마스터 페이지를 만들었습니다.이 페이지는 모든 레코드 개수와 내용 영역을 포함하고 있으므로 실제 페이지에 정보를 전달할 수 있으며 요소 데이터를 출력하는 것에 대해 걱정할 필요가 없습니다.

0

당신이 묻는 바를 정확히 모르겠지만 XML 데이터 - 면책 조항, 릴리스 등을위한 법적 근거가 있습니다. HtmlHelper 확장 경로를 따라 문서의 URL과 HTML로 변환하는 XSLT 스타일 시트를 사용하는 확장 프로그램을 만들었습니다. LINQ XML 클래스를 사용하여 XML을 MemoryStream의 HTML로로드하고 렌더링합니다. 그런 다음이를 뷰를 통해 응답에 쓰여지는 문자열로 리턴합니다. HTML 도우미에 액세스 할 수없는 경우 정적 클래스 (확장명은 어쨌든 확장 클래스)에 정적 메서드와 비슷한 것을 쓸 수 있지만 확장 구문을 사용하지는 않습니다. 이것은 당신이 좋아하는 어떤 시각에서도 표현 될 수 있습니다. 내 코드의

예 :

<%= Html.RenderXML(Url.Content("~/App_Data/waiver.xml"), 
        Url.Content("~/Content/styles/waiver.xsl")) %>