如何将值从视图传递到控制器

3

我有一个问题。

我需要在C#和MVC3中将一个值传递给控制器,但我不知道如何操作。

我的视图代码如下:

@html.textbox("Name"); 
<input value="Envoyer" type="submit">

请问如何将name的值传递给我的控制器?谢谢。

4个回答

6
有另一种方法。
[HttpPost]
public ActionResult Index() {

    string name = Request["name"];
}

我可以从 @html.textbox("Name"); 得到这个吗?真的吗? - Steffi
@steffi,这里是我的一个示例:http://forums.asp.net/t/1669915.aspx/1?Simple+search+page - tugberk
@steffi,另外,你不需要在@Html.TextBox("Name")后面加分号,就像你在评论中写的那样。 - tugberk

6
将其包装在一个表单中,并添加一个提交按钮来调用您的Action方法。
<% using (Html.BeginForm("MethodName", "Home", FormMethod.Post)) {%>
     <% Html.Textbox("Name") %> 
     <input value="Envoyer" type="submit" />
<% } %>



[HttpPost]
public ActionResult MethodName(FormCollection col)
{
    string name = col["Name"];
}

这不对吗?你上面同时使用了Web表单视图引擎和Razor。 - tugberk
1
此外,**@html.textbox("Name")** 的语法是错误的。正确的写法应该是 **@Html.TextBox("Name")**。 - tugberk
现在除了你C#代码中的ActionMethod之外,其他都完美无缺。那不应该是其他东西吗?比如ActionResult?我也刚注意到这个问题。 - tugberk
<input value="Envoyer" type="submit"> 没有闭合标签。 :) - Foyzul Karim

3

<%= Model %>

在MVC 3中,你会发现默认情况下在你的视图中将<dynamic>设置为模型。只需从控制器向视图传递一个字符串作为对象(return View((object)"Name");)。

也可以参考这个更复杂的示例。

[编辑]

我得开始认真阅读 :)

好的,我们开始吧。

最简单的方法是通过<form>。任何输入元素都会被提交到您的控制器,其中'name'属性将是变量名(参数)。

例如:

<form action="/Contact/SendMessage" method="post">
    <table>
        <tr>
            <th>Your e-mail adres:</th>
            <td class="inputCell">
                <input id="txtEmail" name="Email" type="text" value="<%= Model %>" />
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <textarea name="Message" rows="10" style="width: 450px;"></textarea>
            </td>
        </tr>
        <tr>
            <th colspan="2" style="text-align: right;"><input type="submit" id="SendButton" value="Send Message" /></th>
        </tr>
    </table>
</form>

在控制器上,您可以编写以下函数:

[AcceptVerbs(HttpVerbs.Post)]
public RedirectResult SendMessage(String Email, String Message)
{
}

看起来不错。为什么你使用HTML而不是<asp: .../>或<% %>? - Steffi
1
在MVC中通常不使用服务器标记。 - Jack Marchetti

3
只需将其封装在一个表单中,就像之前已经提供的那样:
@using(Html.BeginForm()) {
    @Html.Textbox("Name")

    <input value="Envoyer" type="submit">
}

然后在控制器动作中,只需声明一个名为Name的参数(假设这是在名为Index的视图中发生的):

[HttpPost]
public ActionResult Index(string Name)
{
    // do whatever with Name
}

正如已经提到的那样,使用FormCollection也是一个完全有效的选项,但在我看来,这种方法更加简单、更加清晰。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接