2014-09-13 3 views
0

많은 노력에도 불구하고 내 CSHTML 코드에서 함수를 호출 할 수 없습니다. 이와 같은 건축물이 대략 거칠게 일할 수 있습니까?cshtml에서의 C# 함수 호출

***Function*** 
@functions { 
    public void deleteRecord(int id, Database db) 
    { 
     db.Execute("DROP INDEX "+id+"ON Students"); 
    } 
} 

***Button calling that function*** 
<td><button onclick="@deleteRecord(row.No, db)">Delete</button></td> 

데시벨 이전 SQL 데이터베이스

+2

번호 : 그것은해야

더 많거나 적은 다음과 같습니다 'onclick' 핸들러에 넣은 코드는 자바 스크립트 여야합니다. 페이지의 버튼을 면도기 파일에 넣으면 서버에서 해당 기능을 호출 할 수 있습니다. – JLRishe

+1

아니요. 서버 측/클라이언트 측을 혼란스럽게 만들고 여기 MVC 패턴을 파괴하고 있습니다. 그러나 서비스 호출을 시작하는 것은 쉽습니다. –

답변

0

이 같은 건설도 대략 가능한 작업하는 것입니다 선언?

그렇다면 실제로는 안됩니다. 이것은 매우 나쁜 (디버깅/지원하기 어렵다) 방식으로 우려를 혼합하는 것입니다.

서버 쪽 코드는 클라이언트 쪽보기가 아닌 서버 쪽 개체에 있어야합니다. 이것이 MVC라면, 그 방법은 아마도 모델에 속할 것이다. 이것이 WebForms 인 경우 해당 메소드는 여전히 모델 또는 코드 숨김에 속해있을 수 있습니다.

보기에 메서드를 넣지 마십시오. 어쨌든 뷰는 클래스가 아니므로 메소드가 클래스에 있어야하기 때문에 아마 어쨌든 할 수 없습니다. 그러나 당신이 이것을 할 수 있도록 해킹을 발견하더라도,하지 마십시오.

편집 :은 또한 당신이 클라이언트 측 조치에서이 메소드를 호출 에 노력하고 것으로 나타났습니다. 이것을 으로 컴파일해도 이 아닙니다. 클라이언트 측 코드는 서버 측 코드의 메소드를 직접 호출 할 수 없으며 그 반대도 마찬가지입니다. 웹 응용 프로그램이 실제로는 두 개의 응용 프로그램 (하나는 서버에서 실행되고 다른 하나는 브라우저에서 실행 중임)이라고 생각하십시오. 그들은 서로 통신 할 수 있지만 완전히 다른 컴퓨터에서 서로 다른 플랫폼에서 실행되는 다른 언어이기 때문에 서로의 코드를 볼 수 없습니다.

1

이것은 정말 나쁜 접근 방식입니다. 첫째, 데이터의 엄격한 모델 인 MVC 규칙을 깨고, 모델 및 뷰 레이어 간의 상호 작용을 보장하기 위해 데이터를 표시하고 컨트롤러를 표시합니다.

둘째, 원시 SQL 쿼리를 통해 데이터베이스를 쿼리하려고합니다. 첫 번째 문제만큼 나쁘지는 않지만 Entity Framework 또는 NHibernate와 같은 ORM 사용을 고려 했습니까?

귀하의 경우 JavaScript 및 C#을 사용하여 타겟에 도달하도록 제안합니다. ,

파일 view.cshtml

<td><button id="deleteButton">Delete</button></td> 

파일 script.js

$("#deleteButton").click(function() { 
    $.get("/SomePage/Delete/12") 
    .done(function(obj) { 
     // display result or whatever you want 
    }); 
}) 

파일 SomePageController.cs

public ActionResult Delete(int id) 
{ 
    // delete object from database 
}