You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在ASP.NET Core MVC的Action中接收表单输入?

解决ASP.NET Core MVC表单传递文本框内容到Action的问题

看起来你已经能触发目标Action,但数据没传过去,核心问题主要是请求方式参数匹配的问题,下面给你两种最常用的解决方案,同时解答你关于Html.BeginForm的疑问:

方案一:修改现有手动表单(快速解决)

你的现有表单默认是GET请求,虽然GET也能传参数,但不适合文本内容(长度受限),而且如果你的Action标记了[HttpPost]的话就接收不到。只需要两步修改:

  1. 给表单添加method="post"属性
  2. 确保Action的参数名称和textarea的name属性完全一致

修改后的表单代码:

<div class="panel-body">
    <form action="@Url.Action("updateStatus", "Home")" method="post">
        <!-- 保留你原来的CSS类,样式不会丢失 -->
        <textarea class="greyback" id="w3review" name="w3review" rows="4" cols="50">
            Update your status...
        </textarea>
        <br><br>
        <input class="input" type="submit" value="Submit">
    </form>
</div>

对应的Action代码(注意添加[HttpPost]特性):

[HttpPost]
public IActionResult updateStatus(string w3review)
{
    // 这里就能拿到textarea里的内容了
    // 处理逻辑...
    return RedirectToAction("Index"); // 比如重定向回首页
}

方案二:使用Html.BeginForm(推荐,更符合MVC规范)

Html.BeginForm是Razor提供的HTML辅助方法,它会自动帮你生成正确的<form>标签(包括action和method),而且会自动添加防CSRF的令牌,代码更整洁。

怎么用?

@using块包裹表单内容,块内可以写任何HTML元素(包括你的textarea,完全保留CSS类):

<div class="panel-body">
    @using (Html.BeginForm("updateStatus", "Home", FormMethod.Post))
    {
        <!-- 你的textarea完全保留原有样式和属性 -->
        <textarea class="greyback" id="w3review" name="w3review" rows="4" cols="50">
            Update your status...
        </textarea>
        <br><br>
        <input class="input" type="submit" value="Submit">
    }
</div>

它的工作原理?

  • Html.BeginForm("updateStatus", "Home", FormMethod.Post):第一个参数是Action名称,第二个是Controller名称,第三个是请求方式(POST)
  • using块会自动在结束时闭合<form>标签,避免手动写闭合标签出错
  • 默认会生成防CSRF的隐藏令牌(<input name="__RequestVerificationToken" type="hidden" ...>),配合Action上的[ValidateAntiForgeryToken]特性,提升安全性

对应的Action代码(建议添加防CSRF验证):

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult updateStatus(string w3review)
{
    // 处理文本内容
    return RedirectToAction("Index");
}

关键注意点

  • 参数名称必须匹配:textarea的name属性值(这里是w3review)要和Action的参数名完全一致,ASP.NET Core才能正确绑定数据
  • 优先用POST请求:textarea可能包含大量文本,GET请求的URL长度有限制,POST更适合传递这类数据
  • 保留CSS样式:不管用哪种方式,只要保留HTML元素的class属性(比如greybackinput),你的CSS样式就会正常生效

内容的提问来源于stack exchange,提问作者Grazosi

火山引擎 最新活动