首页 > 解决方案 > 单击按钮时调用控制器方法时需要将文本框值作为参数传递

问题描述

我正在开发一个 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");
        }
    }
}

谁能告诉我我错过了什么?

标签: c#asp.net-mvcasp.net-mvc-4razor

解决方案


因为您为输入标签和 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)

推荐阅读