2010-07-19 14 views
1

我覺得有點愚蠢,但我只想知道如何在控制器上調用服務器站點動作。在MVC中使用HTML按鈕

例如讓我說我有一個文本區域和一個提交按鈕。這個想法是點擊提交按鈕,文本區域中的文本將被提交到數據庫。非常簡單的東西。

謝謝你的幫助!

回答

0

在視圖的HTML中,文本區域和提交按鈕將是表單的一部分,並且該表單的action屬性將指向'',並且您將一部分放入生成該視圖的同一控制器中,以檢查POST數據。如果有POST數據,您可以將其寫入數據庫。

的形式會是這個樣子:

<form action='' method='post'> 
    <textarea name="text"></textarea> 
    <input type="submit" value="Submit"/> 
</form> 

在後,你會看到一個變量與textarea的name屬性(在這種情況下,text)相匹配的密鑰。你可以從那裏閱讀。

如果您願意,也可以將表單上的action屬性更改爲URL,在這種情況下,您會將該數據寫入該URL所指向的控制器中,以檢查POST數據。

在ASPX
+0

感謝您的評論。但是,我將如何定義獲取textarea數據的服務器端函數? – hanesjw 2010-07-19 20:28:21

4

 <%Html.BeginForm("Hello","Home",FormMethod.Post);%> <!--Name of method, name of controller, formmethod --> 
     <input type="text" id="userName" maxlength="50" name="userName"/> 
     <input id="Submit1" type="submit" value="Say Hello!" /> 
    <%Html.EndForm();%> 
    <h2><%= Html.Encode(TempData["Message"]) %></h2> 

在控制器(在該示例中的HomeController):

public ViewResult Hello(string userName) //note this variable is exactly what is the name of text input on page 
     { 
      //simple example, take input and pass back out 
      TempData["Message"] = "Hello, " + userName; 
      return View("Index",TempData); 
     } 

編輯:爲了解決另一個問題有關維護URL

一個方法來完成「留在原地」,只要你的URL是「超載」索引控制器的方法,如下面

[AcceptVerbs(HttpVerbs.Post)] //This is KEY <----- 
     public ActionResult Index(string userName) 
     { 
      //simple example, take input and pass back out 
      TempData["Message"] = "Hello, " + userName; 
      return View("Index",TempData); 
     } 

然後在你的Index.aspx改變Html.Begin表像下面,你只是指向默認動作現在

<%Html.BeginForm("Index","Home",FormMethod.Post);%> 

既然你正在發佈到控制器並沒有得到(默認的索引行動)設置爲AcceptVerb POST的版本,並採取用戶名字符串將運行和您的網址應該保持

+0

感謝您的評論。到目前爲止,這似乎工作,我現在唯一的問題是,它從'你好'行動返回後,它弄亂我的網址。你知道我該如何返回一個相同的控制器/行動/ ID我目前在網址中的視圖? – hanesjw 2010-07-19 21:16:20

+0

我更新瞭解決此問題的答案... – curtisk 2010-07-20 13:00:15

+0

更新後的答案有什麼結果? – curtisk 2010-08-18 17:54:59