提交时正在将ViewUserControl的输入返回到控制器

本文关键字:输入 返回 控制器 ViewUserControl 提交 | 更新日期: 2023-09-27 18:28:09

我承认我是MVC的新手,这个问题可能只是RTF的一个例子。但我在谷歌上搜索这个问题,似乎找不到解决方案。

我有一个简单的视图,用来填充特定模型的一些细节。我需要使用Html.Partial来呈现表单的一部分(事实上,这是一个包装器,用于呈现另一个项目中使用的旧的非MVC控件)。

将数据从控制器获取到视图中没有问题。

那么问题出在哪里呢?在用户按下提交按钮后,如何将部分视图中的用户输入返回到控制器?


这是我目前拥有的视图和控制器:

@model Poll
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    <div class="form-horizontal">
        <h4>Poll</h4>
        <hr />
        @*@Html.ValidationSummary(true)*@
        @Html.HiddenFor(m => m.Id)
        @Html.HiddenFor(m => m.Name)
        @Html.Partial("~/ControlPlaceholder/QuestionPlaceholder.ascx", Model, new ViewDataDictionary(Model))
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Fill" class="btn btn-default" />
            </div>
        </div>
    </div>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

该视图几乎是从MVC5中可用的标准生成的编辑视图中一对一地复制的。请注意,这目前只是一个PoC——通常整个事情应该为Poll中的每个问题呈现一个QuestionPlaceholder

这是控制器的相关部分:

    //
    // GET: /Poll/Fill
    [HttpGet]
    public ActionResult Fill(Guid id)
    {
        var poll = pollRepository.Get(id);
        return View(poll);
    }
    //
    // POST: /Poll/Fill
    [HttpPost]
    public ActionResult Fill(Poll poll, FormCollection collection)
    {
        try
        {
            return RedirectToAction("Index");
        }
        catch
        {
            return View(poll);
        }
    }

提交时正在将ViewUserControl的输入返回到控制器

它非常简单,只需将输入的名称设置为与相应的操作参数相同,并让MVC ModelBinder来完成它的工作。在表单中呈现分部并不重要,它的输入元素值将传递给提交表单时的操作。另一种方法是使用Request.Form["InputName"],这不是我的第一个建议。