2013-03-19 3 views
0

양식 데이터를 보통 <form action="http://www.mysite.com" method="post"> 대신 API를 통해 XML 문자열로 전송하려고합니다.ASP.NET MVC에서 필드를 XML 문자열로 제출합니다.

API는 <Data><firstnamex>Hello</firstnamex><lastnamex>World</lastnamex></Data>과 같은 XML 문자열을 매개 변수로 사용합니다. 어떻게 것 내가, 웹 형태로 할 수처럼 그냥 firstnamex.Text 컨트롤을 잡아 수 없기 때문에 내가 이런 짓을 했을까 웹 양식에

오래된 방법은

String dataXml = "<Data>"; 
dataXml += "<firstnamex>" + firstnamex.Text + "</firstnamex>"; 
dataXml += "<lastnamex>" + lastnamex.Text + "</lastnamex>"; 
dataXml += "</Data>"; 

다음

mainApi.Service1 ws = new mainApi.Service1(); 
string retVal = ws.InsertRecord(dataXml); 

했다 나는 이것을한다?

[HttpPost] 
public ActionResult YourAction(YourModel model) 
{ 
    String dataXml = "<Data>"; 
    dataXml += "<firstnamex>" + model.FirstName + "</firstnamex>"; 
    dataXml += "<lastnamex>" + model.LastName + "</lastnamex>"; 
    dataXml += "</Data>"; 

    // ... 

    return View(model); // or redirect or whatever 
} 
+1

모델의 이름을 가져옵니다. 시작하기 좋은 곳은 http://asp.net/mvc입니다. – jrummell

+0

나는 지난 몇 달 동안 MVC 튜토리얼을 많이 만들었지 만, 아직 이해할 수는 없습니다. 먼저 모델을 설정하고 모델을 기반으로 뷰를 작성해야하지만 사용자가 제출을 클릭하면 결과가 XML 문자열로 표시됩니다. – Derek

답변

0

... 당신은 당신이 전화를 완료하기 위해이 "페이지"에 사용자로부터 수집하는 것을 나타내는 뷰 모델이 필요합니다. 먼저, ViewModel을 생성하여 그 내용을 유지합니다. 이 ViewModel은 실제로 DAL을 호출하는 코드도 보유해야합니다. 컨트롤러가 실제 데이터에 대해 수행해야 할 작업을 너무 많이 인식하게하는 것은 바람직하지 않습니다. ViewModel에서 호출 할 메소드와 반환 된 값 (있는 경우)을 처리하는 방법을 알려줍니다.

public class YourViewModel 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    // other fields here as needed. 

    public YourViewModel() 
    { 
     // you can put any field defaults you need here 
    } 

    public string InserRecord() 
    { 
     String dataXml = "<Data>"; 
     dataXml += "<firstnamex>" + firstnamex.Text + "</firstnamex>"; 
     dataXml += "<lastnamex>" + lastnamex.Text + "</lastnamex>"; 
     dataXml += "</Data>"; 
     mainApi.Service1 ws = new mainApi.Service1(); 
     return ws.InsertRecord(dataXml); 
    } 
} 

public class YourController 
{ 
    public ActionResult YourAction() 
    { 
     var viewModel = new YourViewModel(); 
     return View(viewModel); 
    } 

    [HttpPost] 
    public ActionResult YourAction(YourViewModel viewModel) 
    { 
     var resultFromInsert = viewModel.InserRecord(); 
     // redirect here based on string returned above, or whatever. 
    } 
} 

내가 좋아하는 모델은 Fat; 내 컨트롤러 스키니; 그리고 나의 견해는 명백히 지체되었다.

1

그것은 다음과 같이 보일 것이다

+0

아니요 ... ViewModel이 멍청해야합니다. 뷰에 필요한 정보에 대해서만 책임을 져야합니다. http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/ – jrummell

+1

나는 그 사람들이 정말로 똑똑하다고 생각하지만, 나는 개인적으로 물건을 돌보지 않는다. like Rule # 2 - 각 ViewModel 유형에 대해 정확히 하나의 강력한 형식의 View "가 정의됩니다. 내 ViewModels를 조금 더 넓게 만들고 다른 뷰에서 필요에 따라 뷰를 사용할 수 있도록합니다. ViewModel을 씬 다운 할 수는 있지만, 필자는 절대적으로 필요하다고 생각하지 않습니다. ViewModel에서 내 비즈니스 도메인을 직접 알고 있으면 멋지지만 분리 가능성을 위해 다른 추상 레이어를 추가하려는 경우에도 좋습니다. – Graham

관련 문제