2013-10-04 72 views
0

我正在學習MVC,繼THIS教程。 (鏈接將直接帶你到我卡住的地方)。到目前爲止,我已經瞭解到,每個視圖都有一個控制器。現在,我必須通過教程中提到的Web入口表單來接受用戶的輸入。在我的項目中,我有一個名爲Default1的控制器,我可以將其作爲localhost:xyz/Default1/Index運行。它運行完美。在MVC中使用webforms

然後,我創建了一個新的控制器,名爲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); 
    } 

現在我不得不採取從用戶的輸入,對於CUTOMER見識,使用在教程中提到html頁面。所以我嘗試添加新Web窗體視圖文件夾,並修改了我的控制器:

[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等,但失敗了。 (在我entryform.aspx,我剛纔提到的形式行動=「DisplayCustomer」

+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 --> 
} 

公告方法和控制器來調用。這會將form標籤寫回到您的DisplayCustomers操作。下面是對應的HTML:

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

這樣,你會使用URL http://test.server/Customer/New訪問形式。

+0

謝謝。我想知道2件事。 ** 1:**從您的答案中,我假設我已創建一個名爲** Customer **的控制器,用於我們的輸入表單視圖,名爲** NewCustomers **。在我們的入口表格中,我們已經指定它將調用另一個名爲** DisplayCustomers **的控制器,它將顯示客戶視圖。我說得對嗎? ** 2:**讓我們假設,我沒有使用這個HTML幫助器的東西,那麼我將不得不指定

..對嗎? – Zeeshan

+1

@Zeeshan你的第一個假設是右半邊。是的,我們創建了一個名爲** Customer **的新控制器,但** New **和** DisplayCustomers **都是該控制器的一部分。至於你的第二個問題,如果你不使用助手,該方法將是POST,並且該操作將是http://test.server/Customer/DisplayCustomers。我會用那個細節更新我的答案。 – villecoder

+0

好。我已經開始獲得化學:)你的意思是,在同一個控制器中,我們有2個方法,2個視圖。對? – Zeeshan

0

這可能不是世界上最好的例子......但是這將至少讓你滾..

網址是:本地主機: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