【问题标题】:How to pass value from view to controller如何将值从视图传递到控制器
【发布时间】:2011-04-07 17:25:58
【问题描述】:

我有一个问题。

我需要将C# and MVC3 中的值传递给控制器​​,但我不知道如何。

我认为的代码是:

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

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

谢谢

【问题讨论】:

    标签: c# asp.net asp.net-mvc-3


    【解决方案1】:

    还有另一种方法。

    [HttpPost]
    public ActionResult Index() {
    
        string name = Request["name"];
    }
    

    【讨论】:

    • 我可以从@html.textbox("Name") 得到这个吗? ?真的吗?
    • @steffi 在这里,你会看到我的一个样本:forums.asp.net/t/1669915.aspx/1?Simple+search+page
    • @steffi 也不需要在 @Html.TextBox("Name") 之后使用分号,正如您在评论中所写的那样
    【解决方案2】:

    将其包装在一个表单中,并使用某种提交按钮来调用您的操作方法。

    <% 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 表单视图引擎和剃须刀。
    • 另外,这个 @html.textbox("Name"); 语法错误。它应该是 @Html.TextBox("Name")
    • 除了你的 c# 代码中的 ActionMethod 东西外,一切都已经完美了。那不应该是别的吗?像 ActionResult?我也注意到了
    • 没有结束标签。 :)
    【解决方案3】:

    在 MVC 3 中,您会在视图中看到默认设置为模型的 。只需从控制器将字符串作为对象传递给视图(返回 View((object)"Name");)。

    Also see this for a more complex example.

    [编辑]

    我必须开始更好地阅读:)

    好的,我们开始吧。

    最简单的方法是通过

    。任何输入元素都会发布到您的控制器,其中“名称”属性将是变量名称(参数)。

    例子:

    <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 而不是 或 ?
    • 您通常不会在 MVC 中使用服务器标签。
    【解决方案4】:

    只需将其包装在一个表格中,就像已经提供的那样:

    @using(Html.BeginForm()) {
        @Html.Textbox("Name")
    
        <input value="Envoyer" type="submit">
    }
    

    然后在您的控制器操作中简单地声明一个名为 Name 的参数(假设这发生在名为 Index 的视图中):

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

    如前所述,使用FormCollection 也是一个完全有效的选择,但在我看来,这更简单、更简洁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多