2010-07-19 16 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