2013-10-04 5 views
0

THIS 자습서에 따라 MVC를 배우고 있습니다. (링크를 클릭하면 내가 갇혀있는 곳으로 직접 이동합니다.) 지금까지 제가 배웠습니다. 모든 관점에 대한 컨트롤러가 있습니다. 이제 튜토리얼에서 언급 한 웹 입력 양식을 통해 사용자로부터 의견을 받아야합니다. 내 프로젝트에서, 나는 Default1라는 컨트롤러를 가지고 있으며 localhost : xyz/Default1/Index로 실행할 수있다. 그것은 완벽하게 실행됩니다.MVC에서 웹폼 사용

Default2이라는 새로운 컨트롤러를 만들고 데이터를 표시하기 위해 일부보기에 바인딩했으며 localhost : xyz/Default2/Displaycustomer로 완벽하게 작동했습니다. 고객 정보는 정적 (하드 코딩 됨)이었습니다.

public ViewResult DisplayCustomers() 
    { 
     Customer cobj = new Customer(); 
     cobj.Code = "12"; 
     cobj.Name = "Zeeshan"; 
     cobj.Amount = 7000; 


     return View("DisplayCustomers",cobj); 
    } 

지금 내가 튜토리얼에서 언급 한 바와 같이 HTML 페이지을 사용하여 cutomer의 iformation에 대해 사용자의 입력을해야 : 컨트롤러는 다음과 같이한다. 그래서 난 새로운 웹 양식 폴더보기 에서 추가 시도하고, 그리고 나의 컨트롤러를 수정 :

[HttpPost] 
    public ViewResult DisplayCustomers() 
    { 
     Customer cobj = new Customer(); 

     cobj.Code = Request.Form["Id"].ToString(); 
     cobj.Name = Request.Form["Name"].ToString(); 
     cobj.Amount = Convert.ToDouble(Request.Form["Amount"].ToString()); 

     return View("DisplayCustomers",cobj); 
    } 

내 질문입니다 : 먼저 입력을 받아 있도록 어떻게 내가, 내 프로젝트는 응시 할 수 있습니다, 위의 컨트롤러를 사용하여 표시합니까? 올바른 위치에 웹 폼을 추가 했습니까? 그것을 실행하기위한 링크는 무엇입니까? localhost : xyz/Default2/entryform 등을 시도했지만 실패했습니다.

+0

보기가 어떻게 생겼습니까? 컨트롤러를 수정한다고하면 컨트롤러에서 HttpPost 메서드가 하나만있는 것입니까? 또는 HttpGet도 하나만 가지고 있습니까? – kandroid

답변

1

양식을 표시하는 동작이 누락 된 것처럼 들립니다. 즉, 양식을 표시하기위한 조치가 필요합니다. 해당 양식의 POST 작업은 컨트롤러의 DisplayCustomers 동작을 참조해야합니다. 컨트롤러 코드에서 그래서

:

public class CustomerController : Controller 
{ 
    [HttpGet] 
    public ViewResult New() 
    { 
     return View("NewCustomer"); //Our view that contains the new customer form. 
    } 

    // Add your code for displaying customers below 
} 

그리고 당신의보기에서, 당신은 내가 작업을 지정하는 BeginForm 도우미의 버전을 사용하고이

@using(Html.BeginForm("DisplayCustomers", "Customer")) { 
    <!-- Add your form controls here --> 
} 

공지 사항과 같은 코드 메서드 및 컨트롤러 호출. 그러면 DisplayCustomers 작업에 다시 게시 할 form 태그가 작성됩니다.

<form method="POST" action="/Customer/DisplayCustomers"> 

그런 다음 URL http://test.server/Customer/New를 사용하여 양식을 이용 것이다 : 여기에 해당하는 HTML입니다.

+0

감사합니다. 나는 2 가지를 알고 싶다. ** 1 : ** 귀하의 답변에서 ** 나는 NewCustomers **라는 엔트리 폼 뷰를위한 ** Customer **라는 컨트롤러를 생성했다고 가정합니다. 그리고 우리의 입력 폼에서 우리는 고객 뷰를 표시 할 ** DisplayCustomers **라는 다른 컨트롤러를 호출 할 것이라고 지정했습니다. 나는 그것을 올바르게 받았 느냐? ** 2 : **이 html 도우미를 사용하지 않는다고 가정 해 봅시다. 그런 다음

.. 오른쪽을 지정해야합니다. – Zeeshan

+1

@ Zeeshan 첫 번째 가정은 반쯤입니다. 예, ** Customer **라는 새로운 컨트롤러를 만들었지 만 ** New ** 및 ** DisplayCustomers ** 모두 해당 컨트롤러의 일부입니다. 두 번째 질문에 대해서는 헬퍼를 사용하지 않으면 메서드가 POST이고 동작은 http : //test.server/Customer/DisplayCustomers가됩니다. 나는 그 세부 사항으로 나의 대답을 업데이트 할 것이다. – villecoder

+0

좋아요. 나는 화학 반응을 시작했습니다 :) 당신은 동일한 컨트롤러에서 2 개의 뷰를 갖는 두 개의 메소드가 있다는 것을 의미합니다. 권리? – Zeeshan

0

이 세계 최고의 예를하지 않을 수 있습니다 (내 entryform.aspx에, 난 형태 행동 = "DisplayCustomer"을 언급) ...하지만 적어도 당신은 압연 얻을 것이다 ..

URL은 다음과 같습니다 로컬 호스트 : 1234/홈/고객

컨트롤러

public ActionResult Customer() 
    { 
     return View(); 
    } 
    [HttpPost] 
    public ActionResult Customer(FormCollection frm) 
    { 

     var name = frm["name"].ToString(); 
     var address = frm["address"].ToString(); 

     ViewBag.Name = name; 
     ViewBag.Address = address; 

     return View(); 
    } 

<div> 
    @using (Html.BeginForm()) 
    { 
     <input type="text" name="name" id="name" /> 
     <input type="text" name="address" id="address"/> 

     <input type="submit" name="submit" value="submit" /> 

     <input type="text" name="namedisplay" value='@ViewBag.Name'/> 
     <input type="text" name="addressdisplay" value='@ViewBag.Address'/> 

    } 
</div> 
+0

감사합니다.어디서 뷰를 유지해야하며, 앱의 이름과 앱에서 먼저 뷰를 호출하도록 지정한 위치를 설명해 주시겠습니까? 미안, 나는 초보자 야. – Zeeshan