c# - 单击按钮时调用控制器方法时需要将文本框值作为参数传递
问题描述
我正在开发一个 MVC 表单,该表单应该让用户在各个字段中输入他们的问题的一些描述,然后这些字段中的文本将被编译成电子邮件并在用户单击“提交”按钮后发送给我们.
当用户单击按钮时,我有足够的连接将硬编码的字符串作为参数传递。
@model IntakeFormV2.Models.BotRequest
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<style type="text/css">
#textarea {
height: 500px;
}
</style>
<form class="form-horizontal" method="post" asp-controller="HomeController" asp-action="Create">
@Html.AntiForgeryToken()
<fieldset>
<!-- Form Name -->
<legend>New Request</legend>
<!-- Text input-->
<div class="form-group">
<label class="col-md-4 control-label" for="textinput">Summarize your issue in 100 characters</label>
<div class="col-md-4">
<input id="textinput" name="title" type="text" class="form-control input-md" required="" />
</div>
</div>
<!-- Textarea -->
<div class="form-group">
<label class="col-md-4 control-label" for="textarea">Let us know about any additional information here</label>
<div class="col-md-4">
<textarea class="form-control" id="textarea1" name="description"></textarea>
</div>
</div>
<!-- Button -->
<div class="form-group">
<label class="col-md-4 control-label" for="singlebutton"></label>
<div class="col-md-4">
<p>@Html.ActionLink("Submit Request", "Create", "Home", routeValues: new { title = "hello", description = "world" }, htmlAttributes: new { @class = "btn btn-primary"})</p>
</div>
</div>
</fieldset>
</form>
但不是传递“Hello”和“World”,我需要将用户输入的任何内容传递到“textinput”和“textarea1”字段中。
我是 MVC 的新手,但我知道该模型应该在这里涉及到某个地方。但是一旦输入中有实际文本,我就无法找到如何从视图中设置模型值。
namespace RPAIntakeFormV2.Models
{
public class BotRequest
{
public string RequestTitle { get; set; }
public string RequestDescription { get; set; }
public string RequesterName { get; set; }
public string RequesterDepartment { get; set; }
private bool RequestAdded = false;
}
}
这是我的控制器,从广义上讲——我已经推迟了添加很多预期的功能,直到我能够真正获得我需要的参数。
public class HomeController : Controller
{
private IEnumerable<IssuePriority> priorities;
private IEnumerable<IssueStatus> statusses;
public HomeController()
{
index i = 1;
}
public ViewResult Index()
{
return View("Index");
}
public ActionResult Create(string title, string description)
{
try
{
MessageBox.Show("Hello world");
return RedirectToAction("Index");
}
catch (Exception ex)
{
return View("Index2");
}
}
}
谁能告诉我我错过了什么?
解决方案
因为您为输入标签和 textarea 设置名称与您的参数在操作中相同,以便您可以添加action="/Home/Create"
到表单并将操作链接更改为<button>
标签或<input type="submit" />
这样的标签
<form class="form-horizontal" method="post" action="/Home/Create">
@Html.AntiForgeryToken()
<fieldset>
<!-- Form Name -->
<legend>New Request</legend>
<!-- Text input-->
<div class="form-group">
<label class="col-md-4 control-label" for="textinput">Summarize your issue in 100 characters</label>
<div class="col-md-4">
<input id="textinput" name="title" type="text" class="form-control input-md" required="" />
</div>
</div>
<!-- Textarea -->
<div class="form-group">
<label class="col-md-4 control-label" for="textarea">Let us know about any additional information here</label>
<div class="col-md-4">
<textarea class="form-control" id="textarea1" name="description"></textarea>
</div>
</div>
<!-- Button -->
<div class="form-group">
<label class="col-md-4 control-label" for="singlebutton"></label>
<div class="col-md-4">
<button>Submit Request</button>
</div>
</div>
</fieldset>
</form>
如果你有两个 Create 方法,你需要标记 HttpPost 属性
[HttpPost]
public ActionResult Create(string title, string description)
推荐阅读
- sql - 添加辅助 SQL 索引
- angular - ControlValueAccessor:永远不会调用 registerOnChange()
- dart - 在 State 类之外更改小部件的状态
- matlab - Matlab中的数值二维积分
- sql - SQL ON UPDATE CASCADE - 复合键
- javascript - Adobe Acrobat 中用于多文件转换的 Javascript 失败
- macos - 防止标头通过可可 osx 应用程序中的可执行文件转储
- opentok - Opentok 切换到后置摄像头 SessionDispatcher:error
- excel-formula - 排序逻辑 - Excel 公式
- oracle - Spring Data JPA + Oracle Trigger 将 ID 增加两次