2014-03-12 2 views
0

컨트롤러에서 자신에게 데이터를 전달하는 방법은 무엇입니까? 나는 두 부분으로 구성 페이지가컨트롤러 자체 호출 및 값 전달

:

이 예제를 고려 텍스트 상자의 부부와 함께 (1) 간단한 HTML 양식을하고 업데이트됩니다 버튼 (2) 표를 제출하면 버튼 (1)을 누르십시오. 이런 일이 발생하면 양식의 데이터를 표의 끝에 추가해야합니다. 내가 본 것처럼, List의 개체가 있어야합니다. 단추를 누를 때마다 제어기의 두 매개 변수, 즉 객체 목록과 텍스트 상자 값이 호출됩니다. 그런 다음 컨트롤러가 개체를 생성하고 목록에 추가 한 다음 새 목록을보기로 전달합니다. 뷰는 새 데이터로 렌더링되고 행은 테이블에 성공적으로 추가됩니다. 그러나 페이지를 다시로드해야하는데 다소 잘못된 것으로 느껴집니다.

영구적으로 목록을 포함 할 수있는 정적 개체가 없거나 이러한 컨트롤러 자체 호출 중에 존재하는 것이 문제입니다. 그러한 경우라면 전체 목록 (내가 말했듯이 내가 할 수없는)이 아니라 새로운 텍스트 상자 값을 전달해야합니다. 부분보기가 문제를 해결할 수 있다고 들었지만 어떻게 볼 수는 없습니다.

어떻게해야합니까?

+0

클라이언트 측을 사용하여 서버 측에 가지 않고 파트 2에 행을 추가 할 수 없습니까? –

+0

예, JavaScript로 쉽게 구현할 수 있지만, ASP.NET MVC를 배우고 있으므로 가능하면 기능을 사용하고 싶습니다. – nicks

+0

컨트롤러 자체 호출은 어디에 있습니까? 보기를 반환하는 HTTP POST 호출이 하나만 표시됩니다. 그게 전부 클라이언트> 서버> 클라이언트. 서버> 서버 호출은 어디에 있습니까? – Nilzor

답변

1

은, 내가 피할 수있는 방법을 볼 수 없습니다 : reloading of the page and that feels kinda wrong.

확실하지뿐만 아니라 그들은에서 렌더링하고 있기 때문에 사물이 작동하게하는 방법 부분보기 기본보기 및 모델의 동일 또는 일부가 필요하므로 해당 데이터가 있어야합니다.

당신은 컨트롤러에서 다시 정보를 얻을 수 있고, 내가보기로, 이러한 옵션 그래서 컨트롤러는 어떻게 든이 정보를 얻을 수 있어야합니다

  1. (2) 양식 내부에 일부 유지가, 컨트롤러를 두 드릴 때 두 부분을 모두 사용할 수 있습니다. 모델에 필요한 값이 채워지고보기로 돌아 왔을 때 데이터를 사용할 수 있습니다.

  2. 목록을 만드는 데 필요한 데이터가 포함 된 숨겨진 입력 필드 (1) 부분을 유지하십시오. 옵션 # 1과 개념이 비슷하지만이 방법이 너무 맘에 들지 않습니다. 입력 필드에서 구문 분석을해야하며 매우 우아하지 않습니다.

또한 Session 또는 데이터베이스를 사용하려고 할 수도 있지만, 후자는 잔인한 그래서 내가 그와 함께 갈 것 성능에 히트라고 생각합니다.

+0

그래서 어떤 옵션이 좋은 옵션입니까? 아니면 다른 종류의 나쁜 것입니까? 첫 번째와 두 번째 옵션이 어색하고 데이터베이스가 무거움. 그것을 할 "올바른"방법이 있습니까? 또한 명확한 답변을 보내 주셔서 감사합니다. – nicks

+1

@ NiikaGamkrelidze 나에게 맞는 대답은 javascript를 사용하는 것입니다. 상황에 따라 직접 두 솔루션을 모두 사용해야했습니다. 당신의 목표가 배우기위한 것이라면, 그 경험을 얻기 위해 모든 것을 시도해 보는 것이 어떻겠습니까? 이것도 적용 가능하고 Session과 함께 갈 수 있다면 Session과 함께 갈 것입니다. –

1

양식 데이터를 백업하는 데이터베이스가없는 경우 Session 데이터를 사용하여 목록을 보유 할 수 있습니다.

[HttpPost] 
public ActionResult AddToList(object newObject) 
{ 

    var list = Sesssion["List"] as List<Object>; 
    if (list == null) { 
     list = new List<Object>(); 
     Session["List"] = list; 
    } 
    list.add(newObject); 
    return View(list); // Assuming the view is a strong-typed view with List<Object> as model 
} 

부분적인 전망에 관해서는, 그들은 혼자 페이지를 다시로드의 문제가 해결되지 않을 : 컨트롤러에서

,이 같은 뭔가. 재사용 가능한 자체 포함 페이지 구성 요소의 문제를 해결합니다. 페이지를 새로 고침하는 것이 마음에 들지 않으면 Ajax 호출과 함께 부분 뷰를 사용하여 새 항목이 추가 될 때마다 테이블을 다시 가져올 수 있습니다. 당신은 자바 스크립트없이 달성하고 싶은 말했듯이 우선 들어 Here is an example

+0

가능한 솔루션과 예제 코드를 제공해 주셔서 감사합니다. – nicks