我正在使用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");
}
}
}
有人可以告诉我我想念什么吗?
答案 0 :(得分:1)
因为您为输入标签和文本区域设置了名称,并且与参数相同,因此您可以添加Object
来形成表单,并将操作链接更改为action="/Home/Create"
标签或{ {1}}这样的标签
<button>
如果有两个Create方法,则需要标记HttpPost属性
<input type="submit" />
答案 1 :(得分:0)
您的表单的类型为Post
,那么您的控制器操作方法应为[HttpPost]
,您的“ hello”和“ world”是有效的,因为您在查询参数中发送了该表单,并且将其视为{{ 1}}
因此,首先,如果您需要提交表单,则您的按钮应为[HttpGET]
的输入类型
而不是SUBMIT
使用输入类型Submit
actionlink
如果您曾经使用过<input type="submit" value="Submit Request" class="btn btn-primary" />
,那么
asp.net core
这里<form class="form-horizontal" method="post" asp-controller="HomeController" asp-action="Create">
和asp-controller
是asp.net核心标记助手。
您的表单操作被视为asp-action
,只需将控制器用作Home/Create
,如果您在Home
taghelpers中标记时使用MVC 4
,则不支持。
对于MVC-4
,您应该使用
MVC-4
然后,您的代码出现的问题是将操作设置为表单,并在操作方法上设置@using(Html.BeginForm("create", "home", FormMethod.Post))
{
}
属性。
您的操作应如下所示
[HttpPost]
和您的HTML [HttpPost]
public ActionResult Create(string title, string description)
{
//----
}
名称必须与您要绑定的模型属性相同。或者您可以使用textbox
类似示例
让我知道是否需要更多信息。
@Html.TextBoxFor()
现在<div class="col-md-4">
<input id="textinput" name="RequestTitle" type="text" class="form-control input-md" required="" />
</div>
已与您的模型属性id="textinput"
绑定