Telerik은 ASP.NET MVC를 통제합니다 : 이것이 MVC 모델을 위반합니까?

StackOverflow https://stackoverflow.com/questions/510059

  •  21-08-2019
  •  | 
  •  

문제

  1. 사용합니다 MVC 활성화 Telerik 컨트롤 ASP.NET MVC를 사용하면 MVC 모델을 위반합니까?

  2. 그렇지 않다면 HTML을 수동으로 코딩하는 것에 대한 Telerik 컨트롤을 사용하면 어떤 종류의 성능 히트 (기능 및 개발 속도)가 있습니까?

도움이 되었습니까?

해결책

나는 그 데모를 만든 사람이기 때문에 내 의견도 공유 할 수 있다고 생각합니다. 이 샘플 응용 프로그램은 ME에 따라 MVC 원칙을 위반하지 않습니다. RadControl은 MVC 응용 프로그램의 ViewState 또는 Postbacks에 의존하지 않습니다 (생성 된 출력을 확인하여 직접 확인할 수 있습니다. 실제로 그리드를 바인딩하거나 메뉴를 채우기 위해 일부 코드를 작성해야하지만 코드는 여전히보기 (ASPX)에 있으며 프레젠테이션과 전적으로 관련되어 있습니다 (다시는 내 의견 일 뿐이므로 잘못되었을 수 있습니다).

또한 실제로 몇 가지 제한 사항이 있다고 언급해야합니다. 일부 내장 기능 (포스트 백에 의존)은 MVC에서 작동하지 않습니다. 그러나 해결하는 데 효과가 있습니다. RadControls 및 ASP.NET MVC와 관련하여 특정 질문이 있으면 지원 티켓 또는 포럼 스레드를 자유롭게 열십시오.

다른 팁

두 번째 질문에는 성능 히트 대 수동 코딩과 관련하여 사용중인 컨트롤에 달려 있다고 생각합니다. 예를 들어, 메뉴, tabstrip 또는 PanelBar와 같은 MVC에서 Telerik Navigation 컨트롤을 사용하는 경우 메뉴/Tabstrip/등에는 많은 수동 코딩을 절약 할 수 있습니다. 대화식 기능 (드롭 다운 옵션과 같은) 및 많은 복잡한 CSS를 제공하는 코드. 따라서 MVC의 radcontrols는 다음을 복원하는 데 도움이됩니다.생산력- 풍부한 ASPNET 앱을 구축 할 때 익숙합니다.

Postbacks에 많은 의존하는 그리드와 같은 더 복잡한 컨트롤의 경우 주로 제공된 스타일의 이점이 있습니다. MVC 모델에 맞추려면 그리드와 같은 컨트롤에는 포스트 백 이벤트를 URL 작업으로 "변환"하기 위해 상당히 많은 "사용자 정의"코딩이 필요하므로 MVC 그리드 템플릿과 많은 코드를 저장하지 않을 수 있습니다. 그래도 스타일링에 많은 시간을 절약 할 수 있으며 성능 차이는 무시해야합니다.

도움이되기를 바랍니다.

-todd

나는 이것들이 WebForms의 PostBack 모델에 의존하고 MVC 뷰와 호환되지 않을 것이라고 확신합니다. 아마도 그들이 일할 수있는 방법을 찾을 수는 있지만 MVC 원칙에 맞지 않을 것입니다. 필요한 경우 동일한 웹 사이트에서 WebForm을 MVC보기와 믹싱/일치시킬 수 있지만 권장하지는 않습니다.

Telerik Controls를 사용하여 잃게되는 것은 MVC의 대부분의 이점입니다. 우려의 명확한 분리, 강화 된 테스트 가능성, Leaner HTML, 더 깨끗한 아키텍처. 결국 Telerik이 MVC에 대한 컨트롤이 나온다는 것을 알게 된 것은 놀라운 일이 아닙니다. 현재 공통 구성 요소를 재사용 해야하는 경우 클라이언트 측 또는 수동으로 코딩 된 ViewuserControl에 대한 Pure JavaScript 구현을 살펴보십시오.

개인적으로, 나는 MVC와 함께 현재 Telerik 컨트롤을 사용하지 않을 것입니다. 나는 그들이 어떤 상황에서 일한다고 생각합니다 (http://telerikwatch.com/2009/01/telerik-mvc-demo-app-available.html), 그러나 나는 그것들이 매우 관점 / Postback 중심이라고 생각합니다. Telerik을 알면 MVC 호환 버전이 나오지만 앞에 많은 작업이있는 것처럼 보입니다 ...

나는 이것이 오래된 질문이라는 것을 알고 있습니다 Telerik의 ASP.NET MVC 컨트롤 DatePickers, 그리드, 패널 바, 탭 스트립과 같은 단순히 컨트롤입니다. 이들은 MVC와 경쟁하지 않습니다 뼈대. 그들은 일합니다 함께 ~와 함께 그것. 당신의 질문은 당신이하지 않거나 적어도 했다 MVC가 실제로 무엇인지 이해하지 마십시오.

혼란 스러울 수있는 다른 사람들의 이익을 위해 MVC는 모델-뷰 컨트롤러. 거기에 모델, 이는 저장 또는 값 검색에 사용하는 객체를 나타냅니다. 보다, 해당 객체 값을 표시하고 사용하여 설정하는 데 사용할 수 있습니다. 통제 수단, Telerik의 DatePickers, 그리드 등과 같은 제어 장치, 뷰를 렌더링하고 모델 요소와 상호 작용하는 기능이 있습니다. 모델 업데이트에 사용하는 컨트롤은 해당 모델과 상호 작용하여 MVC를 준수해야합니다. 그렇지 않은 경우, 먼저 MVC 컨트롤로 광고 할 수 없었으므로 컨트롤은 MVC 프레임 워크와 함께 작동하고 "위반"하지 않습니다.

다음은 모델과 함께 DatePicker 컨트롤을 사용하는 것 중 하나입니다.

보다:

@model MyViewModel

<%= Html.Kendo().DateTimePickerFor(model => model.ExpirationDate)
    .Name("datetimepicker")
    .Value(model.ExpirationDate)        
%>

ViewModel : (또는 모델)

public MyViewModel() {
    public DateTime ExpirationDate { get; set; }
}

제어 장치:

public ActionResult Index(int id)
{
    var data = dataContext.SomeTable.Where(e => e.ID == id).FirstOrDefault();
    // return View(data); // this would allow you to use @model SomeTable 
    // in your view, and not require a ViewModel, but returns the whole 
    // record for the given ID

    // ViewModels allow you flexibility in what you return
    MyViewModel mvm = new MyViewModel();
    mvm.ExpirationDate = data.ExpirationDate;
    return View(mvm);
}

Telerik의 데모를 사용하여 코딩하기 위해서는 많은 복사/붙여 넣기 및 특정 모델 및 입력 한 데이터에 대한 다양한 소규모 편집물입니다 (위와 같이). 컨트롤이 대부분의 모든 내장을 가지고 있기 때문에 코드가 훨씬 적으므로 물론 생산 시간이 줄어들고 필터링, 페이징, 정렬과 같은 것들이 있습니다. 그리드 이미 거기에 있습니다. Filterable(), 필터링 용. 개별 데이터 컬럼을 생성하고 데이터 가능에 추가 한 다음 그리드에 바인딩 한 다음 개인에 대해 걱정하는 대신 OnDataBound 이벤트 (여전히 할 수 있지만 덜 필요), 그리드를 인스턴스화하고, 열을 추가하고, 항목 작성, 읽기, 업데이트 및 삭제를위한 컨트롤러 기능을 설정하고, 그리드에서 속성을 설정하면 완료됩니다. :

<%: Html.Kendo().Grid<Models.ViewModels.MyViewModel>()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(c => c.ExpirationDate).Format("MM/DD/YYYY");
    })
    .HtmlAttributes(new { style = "height: 380px;" })
    .Scrollable()
    .Sortable()
    .Filterable()
    .Pageable(pageable => pageable
        .Refresh(true)
        .PageSizes(true)
        .ButtonCount(5))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("Customers_Read", "Grid"))
        .Create(create => create.Action("Customers_Create", "Grid"))
        .Update(update=> update.Action("Customers_Update", "Grid"))
        .Delete(delete => create.Action("Customers_Delete", "Grid"))
    )
 %>

"읽기"는 public ActionResult Index() 위에 그것들을 a에 넣습니다 public Customers_Read([DataSourceRequest] DataSourceRequest request) {} 반환하는 기능 data ~처럼 .ToDataSourceResult(). 업데이트는 해당 기능의 마지막 3 줄과 유사합니다. 모델을 인스턴스화하고 그리드에서 전달 된 모델의 값을 복사 한 다음 다음과 같은 작업을 수행합니다. dataContext.SaveChanges() 저장하려면. 일단 저장되면 그리드는 자동으로 다른 읽기를 수행하므로 최신 값이 표시됩니다. 데이터를 다시 반응하기 위해 포스트 백에서 실행할 필요가 없으므로 더 이상 쓸 코드가 없습니다.

더 나은 아이디어를 제공하려면 여기의 코드 예제를 살펴보십시오. http://demos.telerik.com/aspnet-mvc/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top