在提交时从ViewUserControl获取输入回控制器

时间:2014-10-28 10:13:32

标签: c# asp.net-mvc model-view-controller asp.net-mvc-5

我承认我是MVC的新手,这个问题可能只是RTFM的一个案例。但我正在搜索这个问题,而我似乎无法找到解决方案。

我有一个简单的视图,用于填写特定模型的一些细节。我需要使用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 - 通常整个事情应该为QuestionPlaceholder中的每个问题呈现Poll

这是控制器的相关部分:

    //
    // 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);
        }
    }

1 个答案:

答案 0 :(得分:1)

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