我承认我是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);
}
}
答案 0 :(得分:1)
它很简单,只需设置与相应动作参数相同的输入名称,让MVC ModelBinder完成它的工作。在表单中呈现部分并不重要,它的输入元素值将传递给提交表单上的操作。 另一种方法是使用Request.Form [“InputName”],这不是我的第一个建议。